From 3667197efb7b18ec842efd504785965911f8ac4b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 5 Jun 2024 18:18:34 +0200 Subject: Adding upstream version 10.0.0+dfsg. Signed-off-by: Daniel Baumann --- CHANGELOG-v10.md | 3112 ++++++ CHANGELOG-v10.rst | 2952 +++++ CHANGELOG-v9.md | 7019 ------------ CHANGELOG-v9.rst | 6659 ------------ MANIFEST.in | 6 +- PKG-INFO | 4 +- ansible.egg-info/PKG-INFO | 4 +- ansible.egg-info/SOURCES.txt | 5142 +++++++-- ansible.egg-info/requires.txt | 2 +- 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 +- build-ansible.sh | 6 +- porting_guide_10.rst | 569 + porting_guide_9.rst | 809 -- setup.cfg | 656 +- tags.yaml | 213 +- 5481 files changed, 241462 insertions(+), 205884 deletions(-) create mode 100644 CHANGELOG-v10.md create mode 100644 CHANGELOG-v10.rst delete mode 100644 CHANGELOG-v9.md delete mode 100644 CHANGELOG-v9.rst 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 create mode 100644 porting_guide_10.rst delete mode 100644 porting_guide_9.rst diff --git a/CHANGELOG-v10.md b/CHANGELOG-v10.md new file mode 100644 index 000000000..5ddbe272e --- /dev/null +++ b/CHANGELOG-v10.md @@ -0,0 +1,3112 @@ +# Ansible 10 Release Notes + +This changelog describes changes since Ansible 9\.0\.0\. + +- v10\.0\.0 + - Release Summary + - Removed Collections + - Added Collections + - Ansible\-core + - Included Collections + - Major Changes + - Minor Changes + - Breaking Changes / Porting Guide + - Deprecated Features + - Removed Features \(previously deprecated\) + - Security Fixes + - Bugfixes + - Known Issues + - New Plugins + - New Modules + - New Roles + - Unchanged Collections + + +## v10\.0\.0 + +- Release Summary +- Removed Collections +- Added Collections +- Ansible\-core +- Included Collections +- Major Changes + - Ansible\-core + - ansible\.netcommon + - ansible\.utils + - arista\.eos + - cisco\.asa + - cisco\.ios + - cisco\.iosxr + - cisco\.nxos + - community\.dns + - community\.docker + - community\.hashi\_vault + - community\.hrobot + - community\.mysql + - containers\.podman + - dellemc\.openmanage + - dellemc\.unity + - fortinet\.fortios + - grafana\.grafana + - ibm\.qradar + - infoblox\.nios\_modules + - junipernetworks\.junos + - splunk\.es +- Minor Changes + - Ansible\-core + - amazon\.aws + - ansible\.netcommon + - ansible\.utils + - ansible\.windows + - arista\.eos + - check\_point\.mgmt + - cisco\.aci + - cisco\.dnac + - cisco\.ios + - cisco\.iosxr + - cisco\.ise + - cisco\.meraki + - cisco\.mso + - cisco\.nxos + - community\.aws + - community\.ciscosmb + - community\.crypto + - community\.digitalocean + - community\.dns + - community\.docker + - community\.general + - community\.grafana + - community\.hashi\_vault + - community\.hrobot + - community\.mysql + - community\.postgresql + - community\.rabbitmq + - community\.routeros + - community\.vmware + - community\.windows + - community\.zabbix + - containers\.podman + - dellemc\.enterprise\_sonic + - dellemc\.openmanage + - dellemc\.powerflex + - f5networks\.f5\_modules + - fortinet\.fortimanager + - google\.cloud + - grafana\.grafana + - hetzner\.hcloud + - ibm\.storage\_virtualize + - inspur\.ispim + - junipernetworks\.junos + - kubernetes\.core + - lowlydba\.sqlserver + - microsoft\.ad + - netapp\.ontap + - netapp\.storagegrid + - netbox\.netbox + - purestorage\.flasharray + - purestorage\.flashblade + - telekom\_mms\.icinga\_director + - theforeman\.foreman + - vmware\.vmware\_rest + - vultr\.cloud +- Breaking Changes / Porting Guide + - Ansible\-core + - amazon\.aws + - cloud\.common + - community\.aws + - community\.ciscosmb + - community\.dns + - community\.general + - community\.hrobot + - community\.okd + - hetzner\.hcloud + - kubernetes\.core + - theforeman\.foreman + - vmware\.vmware\_rest +- Deprecated Features + - Ansible\-core + - amazon\.aws + - community\.aws + - community\.crypto + - community\.dns + - community\.docker + - community\.general + - community\.hrobot + - community\.okd + - community\.vmware + - dellemc\.openmanage + - kubernetes\.core +- Removed Features \(previously deprecated\) + - Ansible\-core + - amazon\.aws + - arista\.eos + - cisco\.ios + - cisco\.iosxr + - cisco\.nxos + - community\.dns + - community\.general + - community\.grafana + - community\.hrobot + - junipernetworks\.junos +- Security Fixes + - Ansible\-core + - community\.dns + - community\.docker + - community\.general + - community\.hrobot +- Bugfixes + - Ansible\-core + - amazon\.aws + - ansible\.netcommon + - ansible\.utils + - ansible\.windows + - arista\.eos + - check\_point\.mgmt + - cisco\.aci + - cisco\.asa + - cisco\.ios + - cisco\.iosxr + - cisco\.ise + - cisco\.meraki + - cisco\.mso + - cisco\.nxos + - community\.aws + - community\.ciscosmb + - community\.crypto + - community\.digitalocean + - community\.dns + - community\.docker + - community\.general + - community\.grafana + - community\.hrobot + - community\.mysql + - community\.postgresql + - community\.routeros + - community\.sap\_libs + - community\.vmware + - community\.windows + - community\.zabbix + - containers\.podman + - dellemc\.enterprise\_sonic + - dellemc\.openmanage + - f5networks\.f5\_modules + - fortinet\.fortimanager + - fortinet\.fortios + - hetzner\.hcloud + - ibm\.qradar + - ibm\.storage\_virtualize + - infoblox\.nios\_modules + - junipernetworks\.junos + - kubernetes\.core + - lowlydba\.sqlserver + - microsoft\.ad + - netapp\.ontap + - netapp\.storagegrid + - netbox\.netbox + - purestorage\.flasharray + - purestorage\.flashblade + - splunk\.es + - telekom\_mms\.icinga\_director + - theforeman\.foreman + - vmware\.vmware\_rest + - vultr\.cloud +- Known Issues + - community\.docker + - dellemc\.openmanage +- New Plugins + - Become + - Callback + - Connection + - Filter + - Lookup + - Test +- New Modules + - amazon\.aws + - ansible\.netcommon + - check\_point\.mgmt + - cisco\.ios + - community\.aws + - community\.crypto + - community\.digitalocean + - community\.docker + - community\.general + - community\.hashi\_vault + - community\.zabbix + - containers\.podman + - dellemc\.enterprise\_sonic + - dellemc\.openmanage + - dellemc\.powerflex + - fortinet\.fortimanager + - hetzner\.hcloud + - infoblox\.nios\_modules + - netapp\.ontap + - netbox\.netbox + - purestorage\.flasharray + - purestorage\.flashblade + - theforeman\.foreman + - vultr\.cloud +- New Roles +- Unchanged Collections + + +### Release Summary + +Release Date\: 2024\-06\-04 + +[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) + + +### Removed Collections + +* community\.azure \(previously included version\: 2\.0\.0\) +* community\.sap \(previously included version\: 2\.0\.0\) +* gluster\.gluster \(previously included version\: 1\.0\.2\) +* hpe\.nimble \(previously included version\: 1\.1\.4\) +* netapp\.aws \(previously included version\: 21\.7\.1\) +* netapp\.azure \(previously included version\: 21\.10\.1\) +* netapp\.elementsw \(previously included version\: 21\.7\.0\) +* netapp\.um\_info \(previously included version\: 21\.8\.1\) +* purestorage\.fusion \(previously included version\: 1\.6\.0\) + + +### Added Collections + +* community\.library\_inventory\_filtering\_v1 \(version 1\.0\.1\) +* kaytus\.ksmanage \(version 1\.2\.1\) + + +### Ansible\-core + +Ansible 10\.0\.0 contains ansible\-core version 2\.17\.0\. +This is a newer version than version 2\.16\.0 contained in the previous Ansible release\. + +The changes are reported in the combined changelog below\. + + +### Included Collections + +If not mentioned explicitly\, the changes are reported in the combined changelog below\. + +| Collection | Ansible 9.0.0 | Ansible 10.0.0 | Notes | +| ---------------------------------------- | ------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| amazon.aws | 7.0.0 | 8.0.0 | | +| ansible.netcommon | 5.3.0 | 6.1.2 | | +| ansible.utils | 2.11.0 | 4.1.0 | | +| ansible.windows | 2.1.0 | 2.3.0 | | +| arista.eos | 6.2.1 | 9.0.0 | | +| awx.awx | 23.3.1 | 24.3.1 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | +| azure.azcollection | 1.19.0 | 2.3.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | +| check_point.mgmt | 5.1.1 | 5.2.3 | | +| cisco.aci | 2.8.0 | 2.9.0 | | +| cisco.asa | 4.0.3 | 5.0.1 | | +| cisco.dnac | 6.7.6 | 6.13.3 | | +| cisco.intersight | 2.0.3 | 2.0.9 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | +| cisco.ios | 5.2.0 | 8.0.0 | | +| cisco.iosxr | 6.1.0 | 9.0.0 | | +| cisco.ise | 2.5.16 | 2.9.1 | | +| cisco.meraki | 2.16.14 | 2.18.1 | | +| cisco.mso | 2.5.0 | 2.6.0 | | +| cisco.nxos | 5.2.1 | 8.0.0 | | +| cloud.common | 2.1.4 | 3.0.0 | | +| community.aws | 7.0.0 | 8.0.0 | | +| community.ciscosmb | 1.0.7 | 1.0.9 | | +| community.crypto | 2.16.0 | 2.20.0 | | +| community.digitalocean | 1.24.0 | 1.26.0 | | +| community.dns | 2.6.3 | 3.0.0 | | +| community.docker | 3.4.11 | 3.10.3 | | +| community.general | 8.0.2 | 9.0.1 | | +| community.grafana | 1.6.1 | 1.9.1 | | +| community.hashi_vault | 6.0.0 | 6.2.0 | | +| community.hrobot | 1.8.2 | 2.0.0 | | +| community.library_inventory_filtering_v1 | | 1.0.1 | The collection was added to Ansible | +| community.mongodb | 1.6.3 | 1.7.4 | There are no changes recorded in the changelog. | +| community.mysql | 3.8.0 | 3.9.0 | | +| community.okd | 2.3.0 | 3.0.1 | | +| community.postgresql | 3.2.0 | 3.4.1 | | +| community.rabbitmq | 1.2.3 | 1.3.0 | | +| community.routeros | 2.10.0 | 2.15.0 | | +| community.sap_libs | 1.4.1 | 1.4.2 | | +| community.vmware | 4.0.0 | 4.4.0 | | +| community.windows | 2.0.0 | 2.2.0 | | +| community.zabbix | 2.1.0 | 2.4.0 | | +| containers.podman | 1.11.0 | 1.13.0 | | +| cyberark.pas | 1.0.23 | 1.0.25 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | +| dellemc.enterprise_sonic | 2.2.0 | 2.4.0 | | +| dellemc.openmanage | 8.4.0 | 9.2.0 | | +| dellemc.powerflex | 2.0.1 | 2.4.0 | | +| dellemc.unity | 1.7.1 | 2.0.0 | | +| f5networks.f5_modules | 1.27.0 | 1.28.0 | | +| fortinet.fortimanager | 2.3.0 | 2.5.0 | | +| fortinet.fortios | 2.3.4 | 2.3.6 | | +| google.cloud | 1.2.0 | 1.3.0 | | +| grafana.grafana | 2.2.3 | 5.2.0 | | +| hetzner.hcloud | 2.3.0 | 3.1.1 | | +| ibm.qradar | 2.1.0 | 3.0.0 | | +| ibm.storage_virtualize | 2.1.0 | 2.3.1 | | +| infinidat.infinibox | 1.3.12 | 1.4.5 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | +| infoblox.nios_modules | 1.5.0 | 1.6.1 | | +| inspur.ispim | 2.1.0 | 2.2.1 | | +| junipernetworks.junos | 5.3.0 | 8.0.0 | | +| kaytus.ksmanage | | 1.2.1 | The collection was added to Ansible | +| kubernetes.core | 2.4.0 | 3.1.0 | | +| lowlydba.sqlserver | 2.2.2 | 2.3.2 | | +| microsoft.ad | 1.3.0 | 1.5.0 | | +| netapp.ontap | 22.8.2 | 22.11.0 | | +| netapp.storagegrid | 21.11.1 | 21.12.0 | | +| netbox.netbox | 3.15.0 | 3.18.0 | | +| openstack.cloud | 2.1.0 | 2.2.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | +| purestorage.flasharray | 1.22.0 | 1.28.0 | | +| purestorage.flashblade | 1.14.0 | 1.17.0 | | +| splunk.es | 2.1.0 | 3.0.0 | | +| telekom_mms.icinga_director | 1.34.1 | 2.1.2 | | +| theforeman.foreman | 3.14.0 | 4.0.0 | | +| vmware.vmware_rest | 2.3.1 | 3.0.1 | | +| vultr.cloud | 1.10.0 | 1.12.1 | | + + +### Major Changes + + +#### Ansible\-core + +* urls\.py \- Removed support for Python 2 + + +#### ansible\.netcommon + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. + + +#### ansible\.utils + +* Bumping netaddr to \>\=0\.10\.1\, means that starting from this release\, the minimum netaddr version this collection requires is \>\=0\.10\.1\. +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. +* 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\. + + +#### arista\.eos + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. +* This release removes previously deprecated modules and attributes from this collection\. Please refer to the Removed Features section for details\. +* Update the netcommon base version 6\.1\.0 to support cli\_restore plugin\. + + +#### cisco\.asa + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. + + +#### cisco\.ios + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. +* Update the netcommon base version 6\.1\.0 to support cli\_restore plugin\. +* ios\_ntp \- Remove deprecated ntp legacy module + + +#### cisco\.iosxr + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. +* This release removes previously deprecated module and attributes from this collection\. Please refer to the Removed Features section for details\. +* Update the netcommon base version to support cli\_restore plugin\. + + +#### cisco\.nxos + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. +* This release removes four previously deprecated modules from this collection\. Please refer to the Removed Features section for details\. +* Updated the minimum required ansible\.netcommon version to 6\.1\.0 to support the cli\_restore module\. + + +#### community\.dns + +* The community\.dns collection now depends on the community\.library\_inventory\_filtering\_v1 collection\. This utility collection provides host filtering functionality for inventory plugins\. If you use the Ansible community package\, both collections are included and you do not have to do anything special\. If you install the collection with ansible\-galaxy collection install\, it will be installed automatically\. If you install the collection by copying the files of the collection to a place where ansible\-core can find it\, for example by cloning the git repository\, you need to make sure that you also have to install the dependency if you are using the inventory plugins \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. + + +#### community\.docker + +* The community\.docker collection now depends on the community\.library\_inventory\_filtering\_v1 collection\. This utility collection provides host filtering functionality for inventory plugins\. If you use the Ansible community package\, both collections are included and you do not have to do anything special\. If you install the collection with ansible\-galaxy collection install\, it will be installed automatically\. If you install the collection by copying the files of the collection to a place where ansible\-core can find it\, for example by cloning the git repository\, you need to make sure that you also have to install the dependency if you are using the inventory plugins \([https\://github\.com/ansible\-collections/community\.docker/pull/698](https\://github\.com/ansible\-collections/community\.docker/pull/698)\)\. + + +#### community\.hashi\_vault + +* requirements \- the requests package which is required by hvac now has a more restrictive range for this collection in certain use cases due to breaking security changes in ansible\-core that were backported \([https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416](https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416)\)\. + + +#### community\.hrobot + +* The community\.hrobot collection now depends on the community\.library\_inventory\_filtering\_v1 collection\. This utility collection provides host filtering functionality for inventory plugins\. If you use the Ansible community package\, both collections are included and you do not have to do anything special\. If you install the collection with ansible\-galaxy collection install\, it will be installed automatically\. If you install the collection by copying the files of the collection to a place where ansible\-core can find it\, for example by cloning the git repository\, you need to make sure that you also have to install the dependency if you are using the inventory plugin \([https\://github\.com/ansible\-collections/community\.hrobot/pull/101](https\://github\.com/ansible\-collections/community\.hrobot/pull/101)\)\. + + +#### community\.mysql + +* Collection version 2\.\*\.\* is EOL\, no more bugfixes will be backported\. Please consider upgrading to the latest version\. + + +#### containers\.podman + +* Add quadlet support for Podman modules + + +#### dellemc\.openmanage + +* All OME modules are enhanced to support the environment variables OME\_USERNAME and OME\_PASSWORD as fallback for credentials\. +* All iDRAC and Redfish modules are enhanced to support the environment variables IDRAC\_USERNAME and IDRAC\_PASSWORD as fallback for credentials\. +* idrac\_certificates \- The module is enhanced to support the import and export of CUSTOMCERTIFICATE\. +* idrac\_diagnostics \- The module is introduced to run and export diagnostics on iDRAC\. +* idrac\_gather\_facts \- This role is enhanced to support secure boot\. +* idrac\_license \- The module is introduced to configure iDRAC licenses\. +* idrac\_session \- This module allows you to create and delete the sessions on iDRAC\. +* idrac\_user \- This role is introduced to manage local users of iDRAC\. + + +#### dellemc\.unity + +* Adding support for Unity Puffin v5\.4\. + + +#### fortinet\.fortios + +* Add notes for backup modules in the documentation in both monitor and monitor\_fact modules\. +* Supported new FOS versions 7\.4\.2 and 7\.4\.3\, and support data type mac\_address in the collection\. +* Update all the boolean values to true/false in the documents and examples\. +* Update the document of log\_fact\. +* Update the documentation for the supported versions from latest to a fix version number\. +* Update the mismatched version message with version ranges\. +* Update the required ansible version to 2\.14\. +* Update the required ansible version to 2\.15\. +* Update the supported version ranges instead of concrete version numbers to reduce the collection size\. + + +#### grafana\.grafana + +* Add Grafana Loki role by \@voidquark in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/188](https\://github\.com/grafana/grafana\-ansible\-collection/pull/188) +* Add Grafana Mimir role by \@GVengelen in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/183](https\://github\.com/grafana/grafana\-ansible\-collection/pull/183) +* Add a new config part to configure KeyCloak based auth by \@he0s in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/191](https\://github\.com/grafana/grafana\-ansible\-collection/pull/191) +* Add an Ansible role for Grafana Alloy by \@ishanjainn in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/169](https\://github\.com/grafana/grafana\-ansible\-collection/pull/169) +* Add an Ansible role for OpenTelemetry Collector by \@ishanjainn in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/138](https\://github\.com/grafana/grafana\-ansible\-collection/pull/138) +* Add promtail role by \@voidquark in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/197](https\://github\.com/grafana/grafana\-ansible\-collection/pull/197) +* Bump ansible\-lint from 24\.2\.2 to 24\.2\.3 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/195](https\://github\.com/grafana/grafana\-ansible\-collection/pull/195) + + +#### ibm\.qradar + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. + + +#### infoblox\.nios\_modules + +* Upgrade Ansible version support from 2\.13 to 2\.16\. +* Upgrade Python version support from 3\.8 to 3\.10\. + + +#### junipernetworks\.junos + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. +* This release removes previously deprecated modules from this collection\. Please refer to the Removed Features section for details\. +* Update the netcommon base version 6\.1\.0 to support cli\_restore plugin\. + + +#### splunk\.es + +* Bumping requires\_ansible to \>\=2\.14\.0\, since previous ansible\-core versions are EoL now\. + + +### Minor Changes + + +#### Ansible\-core + +* Add dump and passno mount information to facts component \([https\://github\.com/ansible/ansible/issues/80478](https\://github\.com/ansible/ansible/issues/80478)\) +* Added MIRACLE LINUX 9\.2 in RedHat OS Family\. +* Interpreter Discovery \- Remove hardcoded references to specific python interpreters to use for certain distro versions\, and modify logic for python3 to become the default\. +* Use Python\'s built\-in functools\.update\_wrapper instead an inline copy from Python 3\.7\. +* User can now set ansible\.log to record higher verbosity than what is specified for display via new configuration item LOG\_VERBOSITY\. +* DEFAULT\_PRIVATE\_ROLE\_VARS is now overridden by explicit setting of public for include\_roles and import\_roles\. +* ansible\-galaxy role\|collection init \- accept \-\-extra\-vars to supplement/override the variables ansible\-galaxy injects for templating \.j2 files in the skeleton\. +* import\_role action now also gets a public option that controls variable exports\, default depending on DEFAULT\_PRIVATE\_ROLE\_VARS \(if using defaults equates to public\=True\)\. +* added configuration item TARGET\_LOG\_INFO that allows the user/author to add an information string to the log output on targets\. +* ansible\-doc \- treat double newlines in documentation strings as paragraph breaks\. This is useful to create multi\-paragraph notes in module/plugin documentation \([https\://github\.com/ansible/ansible/pull/82465](https\://github\.com/ansible/ansible/pull/82465)\)\. +* ansible\-doc output has been revamped to make it more visually pleasing when going to a terminal\, also more concise\, use \-v to show extra information\. +* ansible\-galaxy \- Started normalizing build directory with a trailing separator when building collections\, internally\. \([https\://github\.com/ansible/ansible/pull/81619](https\://github\.com/ansible/ansible/pull/81619)\)\. +* ansible\-galaxy dependency resolution messages have changed the unexplained \'virtual\' collection for the specific type \(\'scm\'\, \'dir\'\, etc\) that is more user friendly +* ansible\-test \- Add Alpine 3\.19 container\. +* ansible\-test \- Add Alpine 3\.19 to remotes\. +* ansible\-test \- Add Fedora 39 container\. +* ansible\-test \- Add Fedora 39 remote\. +* ansible\-test \- Add a work\-around for permission denied errors when using pytest \>\= 8 on multi\-user systems with an installed version of ansible\-test\. +* ansible\-test \- Add support for RHEL 9\.3 remotes\. +* ansible\-test \- Added a macOS 14\.3 remote VM\. +* ansible\-test \- Bump the nios\-test\-container from version 2\.0\.0 to version 3\.0\.0\. +* ansible\-test \- Containers and remotes managed by ansible\-test will have their Python EXTERNALLY\-MANAGED marker \(PEP668\) removed\. This provides backwards compatibility for existing tests running in newer environments which mark their Python as externally managed\. A future version of ansible\-test may change this behavior\, requiring tests to be adapted to such environments\. +* ansible\-test \- Make Python 3\.12 the default version used in the base and default containers\. +* ansible\-test \- Remove Alpine 3\(\.18\) container\. +* ansible\-test \- Remove Alpine 3\.18 from remotes\. +* ansible\-test \- Remove Fedora 38 remote support\. +* ansible\-test \- Remove Fedora 38 test container\. +* ansible\-test \- Remove rhel/9\.2 test remote +* ansible\-test \- Remove the FreeBSD 13\.2 remote\. +* ansible\-test \- Removed fallback to virtualenv when \-m venv is non\-functional\. +* ansible\-test \- Removed test remotes\: macos/13\.2 +* ansible\-test \- Removed the no\-basestring sanity test\. The test is no longer necessary now that Python 3 is required\. +* ansible\-test \- Removed the no\-dict\-iteritems\, no\-dict\-iterkeys and no\-dict\-itervalues sanity tests\. The tests are no longer necessary since Python 3 is required\. +* ansible\-test \- Removed the no\-main\-display sanity test\. The unwanted pattern is unlikely to occur\, since the test has existed since Ansible 2\.8\. +* ansible\-test \- Removed the no\-unicode\-literals sanity test\. The test is unnecessary now that Python 3 is required and the unicode\_literals feature has no effect\. +* ansible\-test \- Special handling for installation of cryptography has been removed\, as it is no longer necessary\. +* ansible\-test \- The shellcheck sanity test no longer disables the SC2164 check\. In most cases\, seeing this error means the script is missing set \-e\. +* ansible\-test \- The unidiomatic\-typecheck rule has been enabled in the pylint sanity test\. +* ansible\-test \- The unidiomatic\-typecheck rule has been removed from the validate\-modules sanity test\. +* ansible\-test \- Update the base and default containers to use Ubuntu 22\.04 for the base image\. This also updates PowerShell to version 7\.4\.0 with \.NET 8\.0\.0 and ShellCheck to version 0\.8\.0\. +* ansible\-test \- Updated the CloudStack test container to version 1\.7\.0\. +* ansible\-test \- Updated the distro test containers to version 6\.3\.0 to include coverage 7\.3\.2 for Python 3\.8\+\. The alpine3 container is now based on 3\.18 instead of 3\.17 and includes Python 3\.11 instead of Python 3\.10\. +* ansible\-test \- Updated the distro test containers to version 7\.1\.0\. +* ansible\-test \- When ansible\-test installs requirements\, it now instructs pip to allow installs on externally managed environments as defined by PEP 668\. This only occurs in ephemeral environments managed by ansible\-test\, such as containers\, or when the \-\-requirements option is used\. +* ansible\-test \- When invoking sleep in containers during container setup\, the env command is used to avoid invoking the shell builtin\, if present\. +* ansible\-test \- document block name now included in error message for YAML parsing errors \([https\://github\.com/ansible/ansible/issues/82353](https\://github\.com/ansible/ansible/issues/82353)\)\. +* ansible\-test \- sanity test allows EXAMPLES to be multi\-document YAML \([https\://github\.com/ansible/ansible/issues/82353](https\://github\.com/ansible/ansible/issues/82353)\)\. +* ansible\-test now has FreeBSD 13\.3 and 14\.0 support +* ansible\.builtin\.user \- Remove user not found warning \([https\://github\.com/ansible/ansible/issues/80267](https\://github\.com/ansible/ansible/issues/80267)\) +* apt\_repository\.py \- use api\.launchpad\.net endpoint instead of launchpad\.net/api +* async tasks can now also support check mode at the same time\. +* async\_status now supports check mode\. +* constructed inventory plugin \- Adding a note that only group\_vars of explicit groups are loaded \([https\://github\.com/ansible/ansible/pull/82580](https\://github\.com/ansible/ansible/pull/82580)\)\. +* csvfile \- add a keycol parameter to specify in which column to search\. +* dnf \- add the best option +* dnf5 \- add the best option +* filter plugin \- Add the count and mandatory\_count parameters in the regex\_replace filter +* find \- add a encoding parameter to specify which encoding of the files to be searched\. +* git module \- gpg\_allowlist name was added in 2\.17 and we will eventually deprecate the gpg\_whitelist alias\. +* import\_role \- allow subdirectories with \_from options for parity with include\_role \([https\://github\.com/ansible/ansible/issues/82584](https\://github\.com/ansible/ansible/issues/82584)\)\. +* module argument spec \- Allow module authors to include arbitrary additional context in the argument spec\, by making use of a new top level key called context\. This key should be a dict type\. This allows for users to customize what they place in the argument spec\, without having to ignore sanity tests that validate the schema\. +* modules \- Add the ability for an action plugin to call self\.\_execute\_module\(\*\, ignore\_unknown\_opts\=True\) to execute a module with options that may not be supported for the version being called\. This tells the module basic wrapper to ignore validating the options provided match the arg spec\. +* package action now has a configuration that overrides the detected package manager\, it is still overridden itself by the use option\. +* py3compat \- Remove ansible\.utils\.py3compat as it is no longer necessary +* removed the unused argument create\_new\_password from CLI\.build\_vault\_ids \([https\://github\.com/ansible/ansible/pull/82066](https\://github\.com/ansible/ansible/pull/82066)\)\. +* urls \- Add support for TLS 1\.3 post handshake certificate authentication \- [https\://github\.com/ansible/ansible/issues/81782](https\://github\.com/ansible/ansible/issues/81782) +* urls \- reduce complexity of Request\.open +* user \- accept yescrypt hash as user password +* validate\-modules tests now correctly handles choices in dictionary format\. + + +#### amazon\.aws + +* AnsibeAWSModule \- added fail\_json\_aws\_error\(\) as a wrapper for fail\_json\(\) and fail\_json\_aws\(\) when passed an AnsibleAWSError exception \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1997](https\://github\.com/ansible\-collections/amazon\.aws/pull/1997)\)\. +* autoscaling\_group \- minor PEP8 whitespace sanity fixes \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1846](https\://github\.com/ansible\-collections/amazon\.aws/pull/1846)\)\. +* autoscaling\_group \- removed unused code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1996](https\://github\.com/ansible\-collections/amazon\.aws/pull/1996)\)\. +* backup\_plan \- Let user to set schedule\_expression\_timezone for backup plan rules when when using botocore \>\= 1\.31\.36 \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1952](https\://github\.com/ansible\-collections/amazon\.aws/issues/1952)\)\. +* cloudformation \- apply automatic retries when paginating through stack events without a filter \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2049](https\://github\.com/ansible\-collections/amazon\.aws/pull/2049)\)\. +* cloudtrail \- removed unused code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1996](https\://github\.com/ansible\-collections/amazon\.aws/pull/1996)\)\. +* ec2\_ami\_info \- simplify parameters to get\_image\_attribute to only pass ID of image \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1846](https\://github\.com/ansible\-collections/amazon\.aws/pull/1846)\)\. +* ec2\_eip \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) +* ec2\_instance \- Add support for modifying metadata options of an existing instance \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1918](https\://github\.com/ansible\-collections/amazon\.aws/pull/1918)\)\. +* ec2\_instance \- add support for AdditionalInfo option when creating an instance \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1828](https\://github\.com/ansible\-collections/amazon\.aws/pull/1828)\)\. +* ec2\_instance \- add support for host option in placement\.tenancy \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2026](https\://github\.com/ansible\-collections/amazon\.aws/pull/2026)\)\. +* ec2\_instance \- removed unused code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1996](https\://github\.com/ansible\-collections/amazon\.aws/pull/1996)\)\. +* ec2\_security\_group \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1844](https\://github\.com/ansible\-collections/amazon\.aws/pull/1844)\) +* 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](https\://github\.com/ansible\-collections/amazon\.aws/pull/2052)\)\. +* ec2\_vol \- removed unused code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1996](https\://github\.com/ansible\-collections/amazon\.aws/pull/1996)\)\. +* ec2\_vpc\_igw \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) +* ec2\_vpc\_route\_table \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) +* ec2\_vpc\_subnet \- the default value for tags has been changed from \{\} to None\, to remove tags from a subnet an empty map must be explicitly passed to the module \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1876](https\://github\.com/ansible\-collections/amazon\.aws/pull/1876)\)\. +* ec2\_vpc\_subnet \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) +* 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](https\://github\.com/ansible\-collections/amazon\.aws/pull/1848)\)\. +* elb\_classic\_lb \- removed unused code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1996](https\://github\.com/ansible\-collections/amazon\.aws/pull/1996)\)\. +* iam\_access\_key \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_access\_key\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_group \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_group \- group\_name has been added as an alias to name for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_group \- add support for setting group path \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1892](https\://github\.com/ansible\-collections/amazon\.aws/pull/1892)\)\. +* iam\_group \- adds attached\_policies return value \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1892](https\://github\.com/ansible\-collections/amazon\.aws/pull/1892)\)\. +* iam\_group \- code refactored to avoid single long function \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1892](https\://github\.com/ansible\-collections/amazon\.aws/pull/1892)\)\. +* iam\_group \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_instance\_profile \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_instance\_profile \- attempting to change the path for an existing profile will now generate a warning\, previously this was silently ignored \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_instance\_profile \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_instance\_profile \- the prefix parameter has been renamed path for consistency with other IAM modules\, prefix remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_instance\_profile \- the default value for path has been removed\. New instances will still be created with a default path of /\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_instance\_profile\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_managed\_policy \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_managed\_policy \- description attempting to update the description now results in a warning\, previously it was simply ignored \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. +* iam\_managed\_policy \- policy is no longer a required parameter \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. +* iam\_managed\_policy \- added support for tagging managed policies \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. +* iam\_managed\_policy \- more consistently perform retries on rate limiting errors \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. +* iam\_managed\_policy \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_managed\_policy \- support for setting path \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. +* iam\_managed\_policy \- the policy\_description parameter has been renamed description for consistency with other IAM modules\, policy\_description remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_managed\_policy \- the policy\_name parameter has been renamed name for consistency with other IAM modules\, policy\_name remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_mfa\_device\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_role \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_role \- prefix and path\_prefix have been added as aliases to path for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_role \- role\_name has been added as an alias to name for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_role \- attempting to change the path for an existing profile will now generate a warning\, previously this was silently ignored \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_role \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_role \- the default value for path has been removed\. New roles will still be created with a default path of /\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_role\_info \- path and prefix have been added as aliases to path\_prefix for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_role\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_user \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_user \- user\_name has been added as an alias to name for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_user \- add boundary parameter to support managing boundary policy on users \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. +* iam\_user \- add path parameter to support managing user path \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. +* iam\_user \- added attached\_policies to return value \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. +* iam\_user \- refactored code to reduce complexity \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. +* iam\_user \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_user \- refactored error handling to use a decorator \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1951](https\://github\.com/ansible\-collections/amazon\.aws/pull/1951)\)\. +* iam\_user\_info \- Add login\_profile to return info that is get from a user\, to know if they can login from AWS console \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2012](https\://github\.com/ansible\-collections/amazon\.aws/pull/2012)\)\. +* iam\_user\_info \- prefix has been added as an alias to path\_prefix for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* iam\_user\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* iam\_user\_info \- the path parameter has been renamed path\_prefix for consistency with other IAM modules\, path remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. +* kms\_key \- removed unused code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1996](https\://github\.com/ansible\-collections/amazon\.aws/pull/1996)\)\. +* lambda \- added support for using ECR images for the function \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1939](https\://github\.com/ansible\-collections/amazon\.aws/pull/1939)\)\. +* lambda\_event \- Add support for setting the maximum\_batching\_window\_in\_seconds option \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2025](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](https\://github\.com/ansible\-collections/amazon\.aws/pull/1829)\)\. +* module\_utils\.errors \- added a basic error handler decorator \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1951](https\://github\.com/ansible\-collections/amazon\.aws/pull/1951)\)\. +* module\_utils\.iam \- refactored normalization functions to use boto3\_resource\_to\_ansible\_dict\(\) and boto3\_resource\_list\_to\_ansible\_dict\(\) \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2006](https\://github\.com/ansible\-collections/amazon\.aws/pull/2006)\)\. +* module\_utils\.transformations \- add boto3\_resource\_to\_ansible\_dict\(\) and boto3\_resource\_list\_to\_ansible\_dict\(\) helpers \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2006](https\://github\.com/ansible\-collections/amazon\.aws/pull/2006)\)\. +* 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](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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1198)\)\. +* rds\_cluster \- Add support for ServerlessV2ScalingConfiguration to create and modify cluster operations \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1839](https\://github\.com/ansible\-collections/amazon\.aws/pull/1839)\)\. +* 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](https\://github\.com/ansible\-collections/amazon\.aws/pull/1917)\)\. +* rds\_instance\_snapshot \- minor PEP8 whitespace sanity fixes \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1846](https\://github\.com/ansible\-collections/amazon\.aws/pull/1846)\)\. +* s3\_bucket \- refactor s3\_bucket module code for improved readability and maintainability \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2057](https\://github\.com/ansible\-collections/amazon\.aws/pull/2057)\)\. +* s3\_bucket\_info \- add parameter bucket\_versioning to return the versioning state of a bucket \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1919](https\://github\.com/ansible\-collections/amazon\.aws/pull/1919)\)\. +* s3\_object \- removed unused code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1996](https\://github\.com/ansible\-collections/amazon\.aws/pull/1996)\)\. +* s3\_object\_info \- fix exception raised when listing objects from empty bucket \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1919](https\://github\.com/ansible\-collections/amazon\.aws/pull/1919)\)\. + + +#### ansible\.netcommon + +* Add new module cli\_restore that exclusively handles restoring of backup configuration to target applaince\. + + +#### ansible\.utils + +* Add support in fact\_diff filter plugin to show common lines\.\([https\://github\.com/ansible\-collections/ansible\.utils/issues/311](https\://github\.com/ansible\-collections/ansible\.utils/issues/311)\) +* Fact\_diff filter plugin \- Add fact\_diff filter plugin\. \([https\://github\.com/ansible\-collections/ansible\.utils/issues/78](https\://github\.com/ansible\-collections/ansible\.utils/issues/78)\)\. + + +#### ansible\.windows + +* Set minimum supported Ansible version to 2\.14 to align with the versions still supported by Ansible\. +* win\_share \- Added a new param called scope\_name that allows file shares to be scoped for Windows Server failover cluster roles\. +* win\_uri \- Max depth for json object conversion used to be 2\. Can now send json objects with up to 20 levels of nesting + + +#### arista\.eos + +* 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](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/618)\)\. +* cli\_restore module is part of netcommon\. + + +#### check\_point\.mgmt + +* New resource modules for R81\.20 JHF Take 43 +* meta/runtime\.yml \- update minimum Ansible version required to 2\.14\.0\. + + +#### cisco\.aci + +* Add Authentification option for EIGRP interface profile\. +* Add L3out Floating SVI modules \(aci\_l3out\_floating\_svi\, aci\_l3out\_floating\_svi\_path\, aci\_l3out\_floating\_svi\_path\_secondary\_ip and aci\_l3out\_floating\_svi\_secondary\_ip\) \(\#478\) +* Add No\-verification flag option to reduce the number of API calls\. If true\, a verifying GET will not be sent after a POST update to APIC +* Add access spine interface selector and port block binding in aci\_access\_port\_block\_to\_access\_port +* Add aci\_access\_spine\_interface\_selector module +* Add aci\_action\_rule\_additional\_communities module +* Add aci\_action\_rule\_set\_as\_path and aci\_action\_rule\_set\_as\_path\_asn modules +* Add aci\_bgp\_peer\_prefix\_policy\, aci\_bgp\_route\_summarization\_policy and aci\_bgp\_address\_family\_context\_policy modules +* Add aci\_fabric\_pod\, aci\_fabric\_pod\_external\_tep\, aci\_fabric\_pod\_profile\, aci\_fabric\_pod\_remote\_pool modules \(\#558\) +* Add aci\_hsrp\_interface\_policy\, aci\_l3out\_hsrp\_group\, aci\_l3out\_hsrp\_interface\_profile and aci\_l3out\_hsrp\_secondary\_vip modules \(\#505\) +* Add aci\_interface\_policy\_eigrp \(class\:eigrpIfPol\) module +* Add aci\_interface\_policy\_pim module +* Add aci\_interface\_policy\_storm\_control module +* Add aci\_keychain\_policy and aci\_key\_policy modules +* Add aci\_l3out\_bfd\_multihop\_interface\_profile\, aci\_l3out\_bfd\_interface\_profile\, aci\_interface\_policy\_bfd\_multihop\, aci\_interface\_policy\_bfd and aci\_bfd\_multihop\_node\_policy modules \(\#492\) +* Add aci\_l3out\_dhcp\_relay\_label\, aci\_dhcp\_option\_policy and aci\_dhcp\_option modules +* Add aci\_l3out\_eigrp\_interface\_profile module +* Add aci\_listify filter plugin to flattens nested dictionaries +* Add aci\_netflow\_exporter\_policy module +* Add aci\_netflow\_monitor\_policy and aci\_netflow\_record\_policy modules +* Add aci\_netflow\_monitor\_to\_exporter module +* Add aci\_node\_block module +* Add aci\_pim\_route\_map\_policy and aci\_pim\_route\_map\_entry modules +* Add aci\_qos\_custom\_policy and aci\_qos\_dscp\_class modules +* Add aci\_qos\_dot1p\_class module +* Add action rules attributes to aci\_tenant\_action\_rule\_profile\. +* Add auto to speed attribute options in aci\_interface\_policy\_link\_level module \(\#577\) +* Add missing options to aci\_bd module +* Add modules aci\_bd\_to\_netflow\_monitor\_policy and aci\_bd\_rogue\_exception\_mac \(\#600\) +* Add modules for Fabric External Connection Policies and its childs +* Add option to set delimiter to \_ in aci\_epg\_to\_domain module +* Add qos\_custom\_policy\, pim\_interface\_policy and igmp\_interface\_policy as new child\_classes for aci\_l3out\_logical\_interface\_profile\. +* Add support for annotation in aci\_rest module \(\#437\) +* Add support for block statements in useg attributes with the aci\_epg\_useg\_attribute\_block\_statement module +* Add support for configuration of access switch policy groups with aci\_access\_switch\_policy\_group module +* Add support for configuration of certificate authorities in aci\_aaa\_certificate\_authority +* Add support for configuration of fabric management access policies in aci\_fabric\_management\_access +* Add support for configuration of vrf multicast with aci\_vrf\_multicast module +* Add support for configuring Azure cloud subnets using the aci\_cloud\_subnet module +* Add support for encap scope in aci\_l3out\_interface +* Add support for https ssl cipher configuration in aci\_fabric\_management\_access\_https\_cipher +* Add support for infra l3out nodes bgp\-evpn loopback\, mpls transport loopback and segment id in aci\_l3out\_logical\_node +* Add support for infra sr mpls micro bfd in aci\_l3out\_interface +* Add support for intra epg\, taboo\, and contract interface in aci\_epg\_to\_contract +* Add support for key ring configuration in aci\_aaa\_key\_ring +* Add support for mac and description in aci\_l3out\_interface +* Add support for mpls custom qos policy for infra sr mpls l3outs node profiles in aci\_l3out\_logical\_node\_profile +* Add support for security default settings configuration in aci\_aaa\_security\_default\_settings +* Add support for simple statements in useg attributes with the aci\_epg\_useg\_attribute\_simple\_statement module +* Add support for sr\-mpls bgpInfraPeerP and bgp\_password in aci\_l3out\_bgp\_peer module \(\#543\) +* Add support for sr\-mpls in aci\_l3out module +* Add support for sr\-mpls l3out to infra l3out in aci\_l3out\_to\_sr\_mpls\_infra\_l3out +* Add support for subject labels for EPG\, EPG Contract\, ESG\, Contract Subject\, L2Out External EPG\, L3out External EPG\, and L3out External EPG Contract with the aci\_subject\_label module +* Add support for taboo contract\, contract interface and intra\_epg contract in aci\_l3out\_extepg\_to\_contract +* Add support for useg default block statement configuration for useg epg in aci\_epg +* Modify child class node block conditions to be optional in aci\_switch\_leaf\_selector + + +#### cisco\.dnac + +* Added a method to validate IP addresses\. +* Added attributes \'dnac\_api\_task\_timeout\' and \'dnac\_task\_poll\_interval\' in intent and workflow\_manager modules\. +* Added the op\_modifies\=True when calling SDK APIs in the workflow manager modules\. +* Adding support to importing a template using JSON file +* Addressed image un\-tagging issues in inherited site settings\. +* Changes in discovery workflow manager modules relating to different states of the discovery job +* Changes in inventory and swim workflow manager modules\. +* Changes the minimum supported version from Ansible v2\.9\.10 to v2\.14\.0 +* Corrected site creation issues in the site module when optional parameters are missing\. +* Fixed a minor issue in the site workflow manager module\. +* Fixed management IP updates for devices on SNMP version v2\. +* Introduced sample playbooks for the discovery module\. +* Provided documentation for EWLC templates in Cisco Catalyst Center version 2\.3\.7\.x\. +* Resolved a \'NoneType\' error in discovery module credentials\. +* Updating galaxy\.yml ansible\.utils dependencies\. +* inventory\_workflow\_manager \- Added attributes \'add\_user\_defined\_field\'\, \'update\_interface\_details\'\, \'export\_device\_list\' and \'admin\_status\' +* inventory\_workflow\_manager \- Removed attributes \'provision\_wireless\_device\'\, \'reprovision\_wired\_device\' + + +#### cisco\.ios + +* Add support for cli\_restore functionality\. +* Added ios\_evpn\_evi resource module\. +* Added ios\_evpn\_global resource module\. +* Added ios\_vxlan\_vtep resource module\. +* Fixed ios\_evpn\_evi resource module integration test failure \- code to remove VLAN config\. +* Please refer the PR to know more about core changes \([https\://github\.com/ansible\-collections/ansible\.netcommon/pull/618](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/618)\)\. +* cli\_restore module is part of netcommon\. +* ios\_bgp\_address\_family \- Fixed an issue with inherit peer\-policy CLI +* ios\_bgp\_address\_family \- added \'advertise\' key +* 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\. +* ios\_vlans \- added vlan config CLI feature\. +* ios\_vrf \- added MDT related keys + + +#### cisco\.iosxr + +* Add missing options in afi and safi in address\-family of bgp\_templates RM\. +* 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](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/618)\)\. +* cli\_restore module is part of netcommon\. +* iosxr\_facts \- Add cdp neighbors in ansible\_net\_neighbors dictionary \([https\://github\.com/ansible\-collections/cisco\.iosxr/pull/457](https\://github\.com/ansible\-collections/cisco\.iosxr/pull/457)\)\. + + +#### cisco\.ise + +* Changes the minimum supported version from Ansible v2\.9\.10 to v2\.14\.0 +* Services included configuration\, edda\, dataconnect\_services\, subscriber\. +* cisco\.ise collection now supports ansible\.utils v3 + + +#### cisco\.meraki + +* Adding support to ansible\.utils \"\>\=2\.0\.0\, \<4\.00\"\. +* Ansible collection now support v1\.44\.1 of Dashboard Api\. +* Fixing problem of naming in organizations\_appliance\_vpn\_third\_party\_vpnpeers\_info\. +* Removing state from allowed parameters for networks\_syslog\_servers module\. +* The id parameter is change type to an integer in networks\_appliance\_vlans module\. +* The id parameter is now required for networks\_appliance\_vlans module\. +* administered\_licensing\_subscription\_entitlements\_info \- new plugin\. +* administered\_licensing\_subscription\_subscriptions\_bind \- new plugin\. +* administered\_licensing\_subscription\_subscriptions\_claim \- new plugin\. +* administered\_licensing\_subscription\_subscriptions\_claim\_key\_validate \- new plugin\. +* administered\_licensing\_subscription\_subscriptions\_compliance\_statuses\_info \- new plugin\. +* administered\_licensing\_subscription\_subscriptions\_info \- new plugin\. +* devices\_appliance\_radio\_settings \- new plugin\. +* devices\_appliance\_radio\_settings\_info \- new plugin\. +* devices\_live\_tools\_arp\_table \- new plugin\. +* devices\_live\_tools\_arp\_table\_info \- new plugin\. +* devices\_live\_tools\_cable\_test \- new plugin\. +* devices\_live\_tools\_cable\_test\_info \- new plugin\. +* devices\_live\_tools\_throughput\_test \- new plugin\. +* devices\_live\_tools\_throughput\_test\_info \- new plugin\. +* devices\_live\_tools\_wake\_on\_lan \- new plugin\. +* devices\_live\_tools\_wake\_on\_lan\_info \- new plugin\. +* devices\_wireless\_alternate\_management\_interface\_ipv6 \- new plugin\. +* networks\_appliance\_rf\_profiles \- new plugin\. +* networks\_appliance\_rf\_profiles\_info \- new plugin\. +* networks\_appliance\_traffic\_shaping\_vpn\_exclusions \- new plugin\. +* networks\_sm\_devices\_install\_apps \- new plugin\. +* networks\_sm\_devices\_reboot \- new plugin\. +* networks\_sm\_devices\_shutdown \- new plugin\. +* networks\_sm\_devices\_uninstall\_apps \- new plugin\. +* networks\_vlan\_profiles \- new plugin\. +* networks\_vlan\_profiles\_assignments\_by\_device\_info \- new plugin\. +* networks\_vlan\_profiles\_assignments\_reassign \- new plugin\. +* networks\_vlan\_profiles\_info \- new plugin\. +* networks\_wireless\_ethernet\_ports\_profiles \- new plugin\. +* networks\_wireless\_ethernet\_ports\_profiles\_assign \- new plugin\. +* networks\_wireless\_ethernet\_ports\_profiles\_info \- new plugin\. +* networks\_wireless\_ethernet\_ports\_profiles\_set\_default \- new plugin\. +* organizations\_appliance\_traffic\_shaping\_vpn\_exclusions\_by\_network\_info \- new plugin\. +* organizations\_appliance\_uplinks\_statuses\_overview\_info \- new plugin\. +* organizations\_appliance\_uplinks\_usage\_by\_network\_info \- new plugin\. +* organizations\_camera\_boundaries\_areas\_by\_device\_info \- new plugin\. +* organizations\_camera\_boundaries\_lines\_by\_device\_info \- new plugin\. +* organizations\_camera\_detections\_history\_by\_boundary\_by\_interval\_info \- new plugin\. +* organizations\_camera\_permissions\_info \- new plugin\. +* organizations\_camera\_roles \- new plugin\. +* organizations\_camera\_roles\_info \- new plugin\. +* organizations\_devices\_availabilities\_change\_history\_info \- new plugin\. +* organizations\_devices\_boots\_history\_info \- new plugin\. +* organizations\_sm\_admins\_roles \- new plugin\. +* organizations\_sm\_admins\_roles\_info \- new plugin\. +* organizations\_sm\_sentry\_policies\_assignments \- new plugin\. +* organizations\_sm\_sentry\_policies\_assignments\_by\_network\_info \- new plugin\. +* organizations\_summary\_top\_networks\_by\_status\_info \- new plugin\. +* organizations\_webhooks\_callbacks\_statuses\_info \- new plugin\. +* organizations\_wireless\_devices\_channel\_utilization\_by\_device\_info \- new plugin\. +* organizations\_wireless\_devices\_channel\_utilization\_by\_network\_info \- new plugin\. +* organizations\_wireless\_devices\_channel\_utilization\_history\_by\_device\_by\_interval\_info \- new plugin\. +* 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\. + + +#### cisco\.mso + +* Add Azure Cloud site support to mso\_schema\_site\_contract\_service\_graph +* Add Azure Cloud site support to mso\_schema\_site\_service\_graph +* Add functionality to resolve same name in remote and local user\. +* Add l3out\_template and l3out\_schema arguments to mso\_schema\_site\_external\_epg \(\#394\) +* Add mso\_schema\_site\_contract\_service\_graph module to manage site contract service graph +* Add mso\_schema\_site\_contract\_service\_graph\_listener module to manage Azure site contract service graph listeners and update other modules +* Add new parameter remote\_user to add multiple remote users associated with multiple login domains +* Add support for replacing all existing contracts with new provided contracts in a single operation with one request and adding/removing multiple contracts in multiple operations with a single request in mso\_schema\_template\_anp\_epg\_contract module +* Add support for replacing all existing static ports with new provided static ports in a single operation with one request and adding/removing multiple static ports in multiple operations with a single request in mso\_schema\_template\_anp\_epg\_staticport module +* Add support for required attributes introduced in NDO 4\.2 for mso\_schema\_site\_anp\_epg\_domain +* Support for creation of schemas without templates with the mso\_schema module + + +#### cisco\.nxos + +* 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](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/618)\)\. The cli\_restore module is a part of ansible\.netcommon\. +* nxos\_config \- Relax restrictions on I\(src\) parameter so it can be used more like I\(lines\)\. \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/89](https\://github\.com/ansible\-collections/cisco\.nxos/issues/89)\)\. + + +#### community\.aws + +* api\_gateway \- use fstrings where appropriate \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1962](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](https\://github\.com/ansible\-collections/amazon\.aws/pull/1962)\)\. +* aws\_ssm \- Updated the documentation to explicitly state that an S3 bucket is required\, the behavior of the files in that bucket\, and requirements around that\. \([https\://github\.com/ansible\-collections/community\.aws/issues/1775](https\://github\.com/ansible\-collections/community\.aws/issues/1775)\)\. +* cloudfront\_distribution \- added support for cache\_policy\_id and origin\_request\_policy\_id for behaviors \([https\://github\.com/ansible\-collections/community\.aws/pull/1589](https\://github\.com/ansible\-collections/community\.aws/pull/1589)\) +* community\.aws collection \- apply isort code formatting to ensure consistent formatting of code \([https\://github\.com/ansible\-collections/community\.aws/pull/1962](https\://github\.com/ansible\-collections/community\.aws/pull/1962)\) +* ecs\_taskdefinition \- Add parameter runtime\_platform \([https\://github\.com/ansible\-collections/community\.aws/issues/1891](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](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](https\://github\.com/ansible\-collections/community\.aws/issues/1566)\)\. +* elb\_network\_lb \- add the possibly to update SslPolicy and Certificates for TLS listeners \(\)\. +* glue\_job \- add support for 2 new instance types which are G\.4X and G\.8X \([https\://github\.com/ansible\-collections/community\.aws/pull/2048](https\://github\.com/ansible\-collections/community\.aws/pull/2048)\)\. +* mq\_broker \- add support to wait for broker state via wait and wait\_timeout parameter values \([https\://github\.com/ansible\-collections/community\.aws/pull/1879](https\://github\.com/ansible\-collections/community\.aws/pull/1879)\)\. +* msk\_cluster \- Support for additional m5 and m7g types of MSK clusters \([https\://github\.com/ansible\-collections/community\.aws/pull/1947](https\://github\.com/ansible\-collections/community\.aws/pull/1947)\)\. + + +#### community\.ciscosmb + +* added additional attribute \- add interface \'bandwidth\' attribute +* docs \- addeed info about SG\-250 support and testing +* reverted attribute change \- keep interface \'bandwith\' attribute + + +#### community\.crypto + +* When using cryptography \>\= 42\.0\.0\, use offset\-aware datetime\.datetime objects \(with timezone UTC\) instead of offset\-naive UTC timestamps \([https\://github\.com/ansible\-collections/community\.crypto/issues/726](https\://github\.com/ansible\-collections/community\.crypto/issues/726)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/727](https\://github\.com/ansible\-collections/community\.crypto/pull/727)\)\. +* acme\_certificate \- add include\_renewal\_cert\_id option to allow requesting renewal of a specific certificate according to the current ACME Renewal Information specification draft \([https\://github\.com/ansible\-collections/community\.crypto/pull/739](https\://github\.com/ansible\-collections/community\.crypto/pull/739)\)\. +* luks\_device \- add allow discards option \([https\://github\.com/ansible\-collections/community\.crypto/pull/693](https\://github\.com/ansible\-collections/community\.crypto/pull/693)\)\. +* openssh\_cert \- avoid UTC functions deprecated in Python 3\.12 when using Python 3 \([https\://github\.com/ansible\-collections/community\.crypto/pull/727](https\://github\.com/ansible\-collections/community\.crypto/pull/727)\)\. +* x509\_crl \- the new option serial\_numbers allow to configure in which format serial numbers can be provided to revoked\_certificates\[\]\.serial\_number\. The default is as integers \(serial\_numbers\=integer\) for backwards compatibility\; setting serial\_numbers\=hex\-octets allows to specify colon\-separated hex octet strings like 00\:11\:22\:FF \([https\://github\.com/ansible\-collections/community\.crypto/issues/687](https\://github\.com/ansible\-collections/community\.crypto/issues/687)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/715](https\://github\.com/ansible\-collections/community\.crypto/pull/715)\)\. + + +#### community\.digitalocean + +* digital\_ocean\_kubernetes \- add project\_name parameter \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/264](https\://github\.com/ansible\-collections/community\.digitalocean/issues/264)\)\. +* fix sanity tests \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/323](https\://github\.com/ansible\-collections/community\.digitalocean/issues/323)\)\. + + +#### community\.dns + +* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the filters option has been renamed to simple\_filters\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the community\.library\_inventory\_filtering\_v1 collection\'s functionality \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\. +* inventory plugins \- add filter option which allows to include and exclude hosts based on Jinja2 conditions \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* lookup\, lookup\_as\_dict \- it is now possible to configure whether the input should be treated as an absolute domain name \(search\=false\)\, or potentially as a relative domain name \(search\=true\) \([https\://github\.com/ansible\-collections/community\.dns/issues/200](https\://github\.com/ansible\-collections/community\.dns/issues/200)\, [https\://github\.com/ansible\-collections/community\.dns/pull/201](https\://github\.com/ansible\-collections/community\.dns/pull/201)\)\. +* nameserver\_info and nameserver\_record\_info \- add server parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/168](https\://github\.com/ansible\-collections/community\.dns/pull/168)\, [https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\. +* wait\_for\_txt \- add server parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\. + + +#### community\.docker + +* The EE requirements now include PyYAML\, since the docker\_compose\_v2\* modules depend on it when the definition option is used\. This should not have a noticable effect on generated EEs since ansible\-core itself depends on PyYAML as well\, and ansible\-builder explicitly ignores this dependency \([https\://github\.com/ansible\-collections/community\.docker/pull/832](https\://github\.com/ansible\-collections/community\.docker/pull/832)\)\. +* The ca\_cert option available to almost all modules and plugins has been renamed to ca\_path\. The name ca\_path is also used for similar options in ansible\-core and other collections\. The old name has been added as an alias and can still be used \([https\://github\.com/ansible\-collections/community\.docker/pull/744](https\://github\.com/ansible\-collections/community\.docker/pull/744)\)\. +* The docker\_stack\* modules now use the common CLI\-based module code added for the docker\_image\_build and docker\_compose\_v2 modules\. This means that the modules now have various more configuration options with respect to talking to the Docker Daemon\, and now also are part of the community\.docker\.docker and docker module default groups \([https\://github\.com/ansible\-collections/community\.docker/pull/745](https\://github\.com/ansible\-collections/community\.docker/pull/745)\)\. +* docker\_compose\_v2 \- add scale option to allow to explicitly scale services \([https\://github\.com/ansible\-collections/community\.docker/pull/776](https\://github\.com/ansible\-collections/community\.docker/pull/776)\)\. +* docker\_compose\_v2 \- allow to wait until containers are running/health when running docker compose up with the new wait option \([https\://github\.com/ansible\-collections/community\.docker/issues/794](https\://github\.com/ansible\-collections/community\.docker/issues/794)\, [https\://github\.com/ansible\-collections/community\.docker/pull/796](https\://github\.com/ansible\-collections/community\.docker/pull/796)\)\. +* docker\_compose\_v2\* \- the new option check\_files\_existing allows to disable the check for one of the files compose\.yaml\, compose\.yml\, docker\-compose\.yaml\, and docker\-compose\.yml in project\_src if files is not specified\. This is necessary if a non\-standard compose filename is specified through other means\, like the COMPOSE\_FILE environment variable \([https\://github\.com/ansible\-collections/community\.docker/issues/838](https\://github\.com/ansible\-collections/community\.docker/issues/838)\, [https\://github\.com/ansible\-collections/community\.docker/pull/839](https\://github\.com/ansible\-collections/community\.docker/pull/839)\)\. +* docker\_compose\_v2\* modules \- allow to provide an inline definition of the compose content instead of having to provide a project\_src directory with the compose file written into it \([https\://github\.com/ansible\-collections/community\.docker/issues/829](https\://github\.com/ansible\-collections/community\.docker/issues/829)\, [https\://github\.com/ansible\-collections/community\.docker/pull/832](https\://github\.com/ansible\-collections/community\.docker/pull/832)\)\. +* docker\_compose\_v2\, docker\_compose\_v2\_pull \- support files parameter to specify multiple Compose files \([https\://github\.com/ansible\-collections/community\.docker/issues/772](https\://github\.com/ansible\-collections/community\.docker/issues/772)\, [https\://github\.com/ansible\-collections/community\.docker/pull/775](https\://github\.com/ansible\-collections/community\.docker/pull/775)\)\. +* docker\_container \- add networks\[\]\.mac\_address option for Docker API 1\.44\+\. Note that Docker API 1\.44 no longer uses the global mac\_address option\, this new option is the only way to set the MAC address for a container \([https\://github\.com/ansible\-collections/community\.docker/pull/763](https\://github\.com/ansible\-collections/community\.docker/pull/763)\)\. +* docker\_container \- adds healthcheck\.start\_interval to support healthcheck start interval setting on containers \([https\://github\.com/ansible\-collections/community\.docker/pull/848](https\://github\.com/ansible\-collections/community\.docker/pull/848)\)\. +* docker\_container \- adds healthcheck\.test\_cli\_compatible to allow omit test option on containers without remove existing image test \([https\://github\.com/ansible\-collections/community\.docker/pull/847](https\://github\.com/ansible\-collections/community\.docker/pull/847)\)\. +* docker\_container \- implement better platform string comparisons to improve idempotency \([https\://github\.com/ansible\-collections/community\.docker/issues/654](https\://github\.com/ansible\-collections/community\.docker/issues/654)\, [https\://github\.com/ansible\-collections/community\.docker/pull/705](https\://github\.com/ansible\-collections/community\.docker/pull/705)\)\. +* docker\_container \- internal refactorings which allow comparisons to use more information like details of the current image or the Docker host config \([https\://github\.com/ansible\-collections/community\.docker/pull/713](https\://github\.com/ansible\-collections/community\.docker/pull/713)\)\. +* docker\_container \- the pull\_check\_mode\_behavior option now allows to control the module\'s behavior in check mode when pull\=always \([https\://github\.com/ansible\-collections/community\.docker/issues/792](https\://github\.com/ansible\-collections/community\.docker/issues/792)\, [https\://github\.com/ansible\-collections/community\.docker/pull/797](https\://github\.com/ansible\-collections/community\.docker/pull/797)\)\. +* docker\_container \- the pull option now accepts the three values never\, missing\_image \(default\)\, and never\, next to the previously valid values true \(equivalent to always\) and false \(equivalent to missing\_image\)\. This allows the equivalent to \-\-pull\=never from the Docker command line \([https\://github\.com/ansible\-collections/community\.docker/issues/783](https\://github\.com/ansible\-collections/community\.docker/issues/783)\, [https\://github\.com/ansible\-collections/community\.docker/pull/797](https\://github\.com/ansible\-collections/community\.docker/pull/797)\)\. +* docker\_image \- allow to specify labels and /dev/shm size when building images \([https\://github\.com/ansible\-collections/community\.docker/issues/726](https\://github\.com/ansible\-collections/community\.docker/issues/726)\, [https\://github\.com/ansible\-collections/community\.docker/pull/727](https\://github\.com/ansible\-collections/community\.docker/pull/727)\)\. +* docker\_image \- allow to specify memory size and swap memory size in other units than bytes \([https\://github\.com/ansible\-collections/community\.docker/pull/727](https\://github\.com/ansible\-collections/community\.docker/pull/727)\)\. +* docker\_image\_build \- add outputs option to allow configuring outputs for the build \([https\://github\.com/ansible\-collections/community\.docker/pull/852](https\://github\.com/ansible\-collections/community\.docker/pull/852)\)\. +* docker\_image\_build \- add secrets option to allow passing secrets to the build \([https\://github\.com/ansible\-collections/community\.docker/pull/852](https\://github\.com/ansible\-collections/community\.docker/pull/852)\)\. +* docker\_image\_build \- allow platform to be a list of platforms instead of only a single platform for multi\-platform builds \([https\://github\.com/ansible\-collections/community\.docker/pull/852](https\://github\.com/ansible\-collections/community\.docker/pull/852)\)\. +* docker\_network \- adds config\_only and config\_from to support creating and using config only networks \([https\://github\.com/ansible\-collections/community\.docker/issues/395](https\://github\.com/ansible\-collections/community\.docker/issues/395)\)\. +* docker\_prune \- add new options builder\_cache\_all\, builder\_cache\_filters\, and builder\_cache\_keep\_storage\, and a new return value builder\_cache\_caches\_deleted for pruning build caches \([https\://github\.com/ansible\-collections/community\.docker/issues/844](https\://github\.com/ansible\-collections/community\.docker/issues/844)\, [https\://github\.com/ansible\-collections/community\.docker/issues/845](https\://github\.com/ansible\-collections/community\.docker/issues/845)\)\. +* docker\_swarm\_service \- adds sysctls to support sysctl settings on swarm services \([https\://github\.com/ansible\-collections/community\.docker/issues/190](https\://github\.com/ansible\-collections/community\.docker/issues/190)\)\. +* inventory plugins \- add filter option which allows to include and exclude hosts based on Jinja2 conditions \([https\://github\.com/ansible\-collections/community\.docker/pull/698](https\://github\.com/ansible\-collections/community\.docker/pull/698)\, [https\://github\.com/ansible\-collections/community\.docker/issues/610](https\://github\.com/ansible\-collections/community\.docker/issues/610)\)\. +* vendored Docker SDK for Python \- remove unused code that relies on functionality deprecated in Python 3\.12 \([https\://github\.com/ansible\-collections/community\.docker/pull/834](https\://github\.com/ansible\-collections/community\.docker/pull/834)\)\. + + +#### community\.general + +* PythonRunner module utils \- specialisation of CmdRunner to execute Python scripts \([https\://github\.com/ansible\-collections/community\.general/pull/8289](https\://github\.com/ansible\-collections/community\.general/pull/8289)\)\. +* Use offset\-aware datetime\.datetime objects \(with timezone UTC\) instead of offset\-naive UTC timestamps\, which are deprecated in Python 3\.12 \([https\://github\.com/ansible\-collections/community\.general/pull/8222](https\://github\.com/ansible\-collections/community\.general/pull/8222)\)\. +* aix\_lvol \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* ansible\_galaxy\_install \- minor refactor in the module \([https\://github\.com/ansible\-collections/community\.general/pull/8413](https\://github\.com/ansible\-collections/community\.general/pull/8413)\)\. +* apt\_rpm \- add new states latest and present\_not\_latest\. The value latest is equivalent to the current behavior of present\, which will upgrade a package if a newer version exists\. present\_not\_latest does what most users would expect present to do\: it does not upgrade if the package is already installed\. The current behavior of present will be deprecated in a later version\, and eventually changed to that of present\_not\_latest \([https\://github\.com/ansible\-collections/community\.general/issues/8217](https\://github\.com/ansible\-collections/community\.general/issues/8217)\, [https\://github\.com/ansible\-collections/community\.general/pull/8247](https\://github\.com/ansible\-collections/community\.general/pull/8247)\)\. +* apt\_rpm \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* bitwarden lookup plugin \- add bw\_session option\, to pass session key instead of reading from env \([https\://github\.com/ansible\-collections/community\.general/pull/7994](https\://github\.com/ansible\-collections/community\.general/pull/7994)\)\. +* bitwarden lookup plugin \- add support to filter by organization ID \([https\://github\.com/ansible\-collections/community\.general/pull/8188](https\://github\.com/ansible\-collections/community\.general/pull/8188)\)\. +* bitwarden lookup plugin \- allows to fetch all records of a given collection ID\, by allowing to pass an empty value for search\_value when collection\_id is provided \([https\://github\.com/ansible\-collections/community\.general/pull/8013](https\://github\.com/ansible\-collections/community\.general/pull/8013)\)\. +* bitwarden lookup plugin \- when looking for items using an item ID\, the item is now accessed directly with bw get item instead of searching through all items\. This doubles the lookup speed \([https\://github\.com/ansible\-collections/community\.general/pull/7468](https\://github\.com/ansible\-collections/community\.general/pull/7468)\)\. +* btrfs\_subvolume \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* cmd\_runner module\_utils \- add validation for minimum and maximum length in the value passed to cmd\_runner\_fmt\.as\_list\(\) \([https\://github\.com/ansible\-collections/community\.general/pull/8288](https\://github\.com/ansible\-collections/community\.general/pull/8288)\)\. +* consul\_auth\_method\, consul\_binding\_rule\, consul\_policy\, consul\_role\, consul\_session\, consul\_token \- added action group community\.general\.consul \([https\://github\.com/ansible\-collections/community\.general/pull/7897](https\://github\.com/ansible\-collections/community\.general/pull/7897)\)\. +* consul\_policy \- added support for diff and check mode \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. +* consul\_policy\, consul\_role\, consul\_session \- removed dependency on requests and factored out common parts \([https\://github\.com/ansible\-collections/community\.general/pull/7826](https\://github\.com/ansible\-collections/community\.general/pull/7826)\, [https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. +* consul\_role \- node\_identities now expects a node\_name option to match the Consul API\, the old name is still supported as alias \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. +* consul\_role \- service\_identities now expects a service\_name option to match the Consul API\, the old name is still supported as alias \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. +* consul\_role \- added support for diff mode \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. +* consul\_role \- added support for templated policies \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. +* elastic callback plugin \- close elastic client to not leak resources \([https\://github\.com/ansible\-collections/community\.general/pull/7517](https\://github\.com/ansible\-collections/community\.general/pull/7517)\)\. +* filesystem \- add bcachefs support \([https\://github\.com/ansible\-collections/community\.general/pull/8126](https\://github\.com/ansible\-collections/community\.general/pull/8126)\)\. +* gandi\_livedns \- adds support for personal access tokens \([https\://github\.com/ansible\-collections/community\.general/issues/7639](https\://github\.com/ansible\-collections/community\.general/issues/7639)\, [https\://github\.com/ansible\-collections/community\.general/pull/8337](https\://github\.com/ansible\-collections/community\.general/pull/8337)\)\. +* gconftool2 \- use ModuleHelper with VarDict \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. +* git\_config \- allow multiple git configs for the same name with the new add\_mode option \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\. +* git\_config \- the after and before fields in the diff of the return value can be a list instead of a string in case more configs with the same key are affected \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\. +* git\_config \- when a value is unset\, all configs with the same key are unset \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\. +* gitlab modules \- add ca\_path option \([https\://github\.com/ansible\-collections/community\.general/pull/7472](https\://github\.com/ansible\-collections/community\.general/pull/7472)\)\. +* gitlab modules \- remove duplicate gitlab package check \([https\://github\.com/ansible\-collections/community\.general/pull/7486](https\://github\.com/ansible\-collections/community\.general/pull/7486)\)\. +* gitlab\_deploy\_key\, gitlab\_group\_members\, gitlab\_group\_variable\, gitlab\_hook\, gitlab\_instance\_variable\, gitlab\_project\_badge\, gitlab\_project\_variable\, gitlab\_user \- improve API pagination and compatibility with different versions of python\-gitlab \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\. +* gitlab\_hook \- adds releases\_events parameter for supporting Releases events triggers on GitLab hooks \([https\://github\.com/ansible\-collections/community\.general/pull/7956](https\://github\.com/ansible\-collections/community\.general/pull/7956)\)\. +* gitlab\_runner \- add support for new runner creation workflow \([https\://github\.com/ansible\-collections/community\.general/pull/7199](https\://github\.com/ansible\-collections/community\.general/pull/7199)\)\. +* homebrew \- adds force\_formula parameter to disambiguate a formula from a cask of the same name \([https\://github\.com/ansible\-collections/community\.general/issues/8274](https\://github\.com/ansible\-collections/community\.general/issues/8274)\)\. +* homebrew\, homebrew\_cask \- refactor common argument validation logic into a dedicated homebrew module utils \([https\://github\.com/ansible\-collections/community\.general/issues/8323](https\://github\.com/ansible\-collections/community\.general/issues/8323)\, [https\://github\.com/ansible\-collections/community\.general/pull/8324](https\://github\.com/ansible\-collections/community\.general/pull/8324)\)\. +* icinga2 inventory plugin \- add Jinja2 templating support to url\, user\, and password paramenters \([https\://github\.com/ansible\-collections/community\.general/issues/7074](https\://github\.com/ansible\-collections/community\.general/issues/7074)\, [https\://github\.com/ansible\-collections/community\.general/pull/7996](https\://github\.com/ansible\-collections/community\.general/pull/7996)\)\. +* icinga2 inventory plugin \- adds new parameter group\_by\_hostgroups in order to make grouping by Icinga2 hostgroups optional \([https\://github\.com/ansible\-collections/community\.general/pull/7998](https\://github\.com/ansible\-collections/community\.general/pull/7998)\)\. +* ini\_file \- add an optional parameter section\_has\_values\. If the target ini file contains more than one section\, use section\_has\_values to specify which one should be updated \([https\://github\.com/ansible\-collections/community\.general/pull/7505](https\://github\.com/ansible\-collections/community\.general/pull/7505)\)\. +* ini\_file \- support optional spaces between section names and their surrounding brackets \([https\://github\.com/ansible\-collections/community\.general/pull/8075](https\://github\.com/ansible\-collections/community\.general/pull/8075)\)\. +* installp \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* ipa\_config \- adds passkey choice to ipauserauthtype parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7588](https\://github\.com/ansible\-collections/community\.general/pull/7588)\)\. +* ipa\_dnsrecord \- adds ability to manage NS record types \([https\://github\.com/ansible\-collections/community\.general/pull/7737](https\://github\.com/ansible\-collections/community\.general/pull/7737)\)\. +* ipa\_pwpolicy \- refactor module and exchange a sequence if statements with a for loop \([https\://github\.com/ansible\-collections/community\.general/pull/7723](https\://github\.com/ansible\-collections/community\.general/pull/7723)\)\. +* ipa\_pwpolicy \- update module to support maxrepeat\, maxsequence\, dictcheck\, usercheck\, gracelimit parameters in FreeIPA password policies \([https\://github\.com/ansible\-collections/community\.general/pull/7723](https\://github\.com/ansible\-collections/community\.general/pull/7723)\)\. +* ipa\_sudorule \- adds options to include denied commands or command groups \([https\://github\.com/ansible\-collections/community\.general/pull/7415](https\://github\.com/ansible\-collections/community\.general/pull/7415)\)\. +* ipa\_user \- adds idp and passkey choice to ipauserauthtype parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7589](https\://github\.com/ansible\-collections/community\.general/pull/7589)\)\. +* irc \- add validate\_certs option\, and rename use\_ssl to use\_tls\, while keeping use\_ssl as an alias\. The default value for validate\_certs is false for backwards compatibility\. We recommend to every user of this module to explicitly set use\_tls\=true and validate\_certs\=true\` whenever possible\, especially when communicating to IRC servers over the internet \([https\://github\.com/ansible\-collections/community\.general/pull/7550](https\://github\.com/ansible\-collections/community\.general/pull/7550)\)\. +* java\_cert \- add cert\_content argument \([https\://github\.com/ansible\-collections/community\.general/pull/8153](https\://github\.com/ansible\-collections/community\.general/pull/8153)\)\. +* java\_cert \- enable owner\, group\, mode\, and other generic file arguments \([https\://github\.com/ansible\-collections/community\.general/pull/8116](https\://github\.com/ansible\-collections/community\.general/pull/8116)\)\. +* kernel\_blacklist \- use ModuleHelper with VarDict \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. +* keycloak module utils \- expose error message from Keycloak server for HTTP errors in some specific situations \([https\://github\.com/ansible\-collections/community\.general/pull/7645](https\://github\.com/ansible\-collections/community\.general/pull/7645)\)\. +* keycloak\_client\, keycloak\_clientscope\, keycloak\_clienttemplate \- added docker\-v2 protocol support\, enhancing alignment with Keycloak\'s protocol options \([https\://github\.com/ansible\-collections/community\.general/issues/8215](https\://github\.com/ansible\-collections/community\.general/issues/8215)\, [https\://github\.com/ansible\-collections/community\.general/pull/8216](https\://github\.com/ansible\-collections/community\.general/pull/8216)\)\. +* keycloak\_realm\_key \- the config\.algorithm option now supports 8 additional key algorithms \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\. +* keycloak\_realm\_key \- the config\.certificate option value is no longer defined with no\_log\=True \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\. +* keycloak\_realm\_key \- the provider\_id option now supports RSA encryption key usage \(value rsa\-enc\) \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\. +* keycloak\_user\_federation \- add option for krbPrincipalAttribute \([https\://github\.com/ansible\-collections/community\.general/pull/7538](https\://github\.com/ansible\-collections/community\.general/pull/7538)\)\. +* keycloak\_user\_federation \- allow custom user storage providers to be set through provider\_id \([https\://github\.com/ansible\-collections/community\.general/pull/7789](https\://github\.com/ansible\-collections/community\.general/pull/7789)\)\. +* ldap\_attrs \- module now supports diff mode\, showing which attributes are changed within an operation \([https\://github\.com/ansible\-collections/community\.general/pull/8073](https\://github\.com/ansible\-collections/community\.general/pull/8073)\)\. +* lvg \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* lvol \- change pvs argument type to list of strings \([https\://github\.com/ansible\-collections/community\.general/pull/7676](https\://github\.com/ansible\-collections/community\.general/pull/7676)\, [https\://github\.com/ansible\-collections/community\.general/issues/7504](https\://github\.com/ansible\-collections/community\.general/issues/7504)\)\. +* lvol \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* lxd connection plugin \- tighten the detection logic for lxd Instance not found errors\, to avoid false detection on unrelated errors such as /usr/bin/python3\: not found \([https\://github\.com/ansible\-collections/community\.general/pull/7521](https\://github\.com/ansible\-collections/community\.general/pull/7521)\)\. +* lxd\_container \- uses /1\.0/instances API endpoint\, if available\. Falls back to /1\.0/containers or /1\.0/virtual\-machines\. Fixes issue when using Incus or LXD 5\.19 due to migrating to /1\.0/instances endpoint \([https\://github\.com/ansible\-collections/community\.general/pull/7980](https\://github\.com/ansible\-collections/community\.general/pull/7980)\)\. +* macports \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* mail \- add Message\-ID header\; which is required by some mail servers \([https\://github\.com/ansible\-collections/community\.general/pull/7740](https\://github\.com/ansible\-collections/community\.general/pull/7740)\)\. +* mail module\, mail callback plugin \- allow to configure the domain name of the Message\-ID header with a new message\_id\_domain option \([https\://github\.com/ansible\-collections/community\.general/pull/7765](https\://github\.com/ansible\-collections/community\.general/pull/7765)\)\. +* mssql\_script \- adds transactional \(rollback/commit\) support via optional boolean param transaction \([https\://github\.com/ansible\-collections/community\.general/pull/7976](https\://github\.com/ansible\-collections/community\.general/pull/7976)\)\. +* netcup\_dns \- adds support for record types OPENPGPKEY\, SMIMEA\, and SSHFP \([https\://github\.com/ansible\-collections/community\.general/pull/7489](https\://github\.com/ansible\-collections/community\.general/pull/7489)\)\. +* nmcli \- add support for new connection type loopback \([https\://github\.com/ansible\-collections/community\.general/issues/6572](https\://github\.com/ansible\-collections/community\.general/issues/6572)\)\. +* nmcli \- adds OpenvSwitch support with new type values ovs\-port\, ovs\-interface\, and ovs\-bridge\, and new slave\_type value ovs\-port \([https\://github\.com/ansible\-collections/community\.general/pull/8154](https\://github\.com/ansible\-collections/community\.general/pull/8154)\)\. +* nmcli \- allow for infiniband slaves of bond interface types \([https\://github\.com/ansible\-collections/community\.general/pull/7569](https\://github\.com/ansible\-collections/community\.general/pull/7569)\)\. +* nmcli \- allow for the setting of MTU for infiniband and bond interface types \([https\://github\.com/ansible\-collections/community\.general/pull/7499](https\://github\.com/ansible\-collections/community\.general/pull/7499)\)\. +* nmcli \- allow setting MTU for bond\-slave interface types \([https\://github\.com/ansible\-collections/community\.general/pull/8118](https\://github\.com/ansible\-collections/community\.general/pull/8118)\)\. +* onepassword lookup plugin \- support 1Password Connect with the opv2 client by setting the connect\_host and connect\_token parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7116](https\://github\.com/ansible\-collections/community\.general/pull/7116)\)\. +* onepassword\_raw lookup plugin \- support 1Password Connect with the opv2 client by setting the connect\_host and connect\_token parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7116](https\://github\.com/ansible\-collections/community\.general/pull/7116)\) +* opentelemetry \- add support for HTTP trace\_exporter and configures the behavior via OTEL\_EXPORTER\_OTLP\_TRACES\_PROTOCOL \([https\://github\.com/ansible\-collections/community\.general/issues/7888](https\://github\.com/ansible\-collections/community\.general/issues/7888)\, [https\://github\.com/ansible\-collections/community\.general/pull/8321](https\://github\.com/ansible\-collections/community\.general/pull/8321)\)\. +* opentelemetry \- add support for exporting spans in a file via ANSIBLE\_OPENTELEMETRY\_STORE\_SPANS\_IN\_FILE \([https\://github\.com/ansible\-collections/community\.general/issues/7888](https\://github\.com/ansible\-collections/community\.general/issues/7888)\, [https\://github\.com/ansible\-collections/community\.general/pull/8363](https\://github\.com/ansible\-collections/community\.general/pull/8363)\)\. +* opkg \- use ModuleHelper with VarDict \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. +* osx\_defaults \- add option check\_types to enable changing the type of existing defaults on the fly \([https\://github\.com/ansible\-collections/community\.general/pull/8173](https\://github\.com/ansible\-collections/community\.general/pull/8173)\)\. +* parted \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* passwordstore \- adds timestamp and preserve parameters to modify the stored password format \([https\://github\.com/ansible\-collections/community\.general/pull/7426](https\://github\.com/ansible\-collections/community\.general/pull/7426)\)\. +* passwordstore lookup \- add missing\_subkey parameter defining the behavior of the lookup when a passwordstore subkey is missing \([https\://github\.com/ansible\-collections/community\.general/pull/8166](https\://github\.com/ansible\-collections/community\.general/pull/8166)\)\. +* pipx \- use ModuleHelper with VarDict \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. +* pkg5 \- add support for non\-silent execution \([https\://github\.com/ansible\-collections/community\.general/issues/8379](https\://github\.com/ansible\-collections/community\.general/issues/8379)\, [https\://github\.com/ansible\-collections/community\.general/pull/8382](https\://github\.com/ansible\-collections/community\.general/pull/8382)\)\. +* pkgin \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* portage \- adds the possibility to explicitely tell portage to write packages to world file \([https\://github\.com/ansible\-collections/community\.general/issues/6226](https\://github\.com/ansible\-collections/community\.general/issues/6226)\, [https\://github\.com/ansible\-collections/community\.general/pull/8236](https\://github\.com/ansible\-collections/community\.general/pull/8236)\)\. +* portinstall \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* proxmox \- adds startup parameters to configure startup order\, startup delay and shutdown delay \([https\://github\.com/ansible\-collections/community\.general/pull/8038](https\://github\.com/ansible\-collections/community\.general/pull/8038)\)\. +* proxmox \- adds template value to the state parameter\, allowing conversion of container to a template \([https\://github\.com/ansible\-collections/community\.general/pull/7143](https\://github\.com/ansible\-collections/community\.general/pull/7143)\)\. +* proxmox \- adds update parameter\, allowing update of an already existing containers configuration \([https\://github\.com/ansible\-collections/community\.general/pull/7540](https\://github\.com/ansible\-collections/community\.general/pull/7540)\)\. +* proxmox inventory plugin \- adds an option to exclude nodes from the dynamic inventory generation\. The new setting is optional\, not using this option will behave as usual \([https\://github\.com/ansible\-collections/community\.general/issues/6714](https\://github\.com/ansible\-collections/community\.general/issues/6714)\, [https\://github\.com/ansible\-collections/community\.general/pull/7461](https\://github\.com/ansible\-collections/community\.general/pull/7461)\)\. +* proxmox\* modules \- there is now a community\.general\.proxmox module defaults group that can be used to set default options for all Proxmox modules \([https\://github\.com/ansible\-collections/community\.general/pull/8334](https\://github\.com/ansible\-collections/community\.general/pull/8334)\)\. +* proxmox\_disk \- add ability to manipulate CD\-ROM drive \([https\://github\.com/ansible\-collections/community\.general/pull/7495](https\://github\.com/ansible\-collections/community\.general/pull/7495)\)\. +* proxmox\_kvm \- add parameter update\_unsafe to avoid limitations when updating dangerous values \([https\://github\.com/ansible\-collections/community\.general/pull/7843](https\://github\.com/ansible\-collections/community\.general/pull/7843)\)\. +* proxmox\_kvm \- adds template value to the state parameter\, allowing conversion of a VM to a template \([https\://github\.com/ansible\-collections/community\.general/pull/7143](https\://github\.com/ansible\-collections/community\.general/pull/7143)\)\. +* proxmox\_kvm \- adds\`\`usb\`\` parameter for setting USB devices on proxmox KVM VMs \([https\://github\.com/ansible\-collections/community\.general/pull/8199](https\://github\.com/ansible\-collections/community\.general/pull/8199)\)\. +* proxmox\_kvm \- support the hookscript parameter \([https\://github\.com/ansible\-collections/community\.general/issues/7600](https\://github\.com/ansible\-collections/community\.general/issues/7600)\)\. +* proxmox\_ostype \- it is now possible to specify the ostype when creating an LXC container \([https\://github\.com/ansible\-collections/community\.general/pull/7462](https\://github\.com/ansible\-collections/community\.general/pull/7462)\)\. +* proxmox\_vm\_info \- add ability to retrieve configuration info \([https\://github\.com/ansible\-collections/community\.general/pull/7485](https\://github\.com/ansible\-collections/community\.general/pull/7485)\)\. +* puppet \- new feature to set \-\-waitforlock option \([https\://github\.com/ansible\-collections/community\.general/pull/8282](https\://github\.com/ansible\-collections/community\.general/pull/8282)\)\. +* redfish\_command \- add command ResetToDefaults to reset manager to default state \([https\://github\.com/ansible\-collections/community\.general/issues/8163](https\://github\.com/ansible\-collections/community\.general/issues/8163)\)\. +* redfish\_config \- add command SetServiceIdentification to set service identification \([https\://github\.com/ansible\-collections/community\.general/issues/7916](https\://github\.com/ansible\-collections/community\.general/issues/7916)\)\. +* redfish\_info \- add boolean return value MultipartHttpPush to GetFirmwareUpdateCapabilities \([https\://github\.com/ansible\-collections/community\.general/issues/8194](https\://github\.com/ansible\-collections/community\.general/issues/8194)\, [https\://github\.com/ansible\-collections/community\.general/pull/8195](https\://github\.com/ansible\-collections/community\.general/pull/8195)\)\. +* redfish\_info \- add command GetServiceIdentification to get service identification \([https\://github\.com/ansible\-collections/community\.general/issues/7882](https\://github\.com/ansible\-collections/community\.general/issues/7882)\)\. +* redfish\_info \- adding the BootProgress property when getting Systems info \([https\://github\.com/ansible\-collections/community\.general/pull/7626](https\://github\.com/ansible\-collections/community\.general/pull/7626)\)\. +* revbitspss lookup plugin \- removed a redundant unicode prefix\. The prefix was not necessary for Python 3 and has been cleaned up to streamline the code \([https\://github\.com/ansible\-collections/community\.general/pull/8087](https\://github\.com/ansible\-collections/community\.general/pull/8087)\)\. +* rundeck module utils \- allow to pass Content\-Type to API requests \([https\://github\.com/ansible\-collections/community\.general/pull/7684](https\://github\.com/ansible\-collections/community\.general/pull/7684)\)\. +* slackpkg \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* ssh\_config \- adds controlmaster\, controlpath and controlpersist parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7456](https\://github\.com/ansible\-collections/community\.general/pull/7456)\)\. +* ssh\_config \- allow accept\-new as valid value for strict\_host\_key\_checking \([https\://github\.com/ansible\-collections/community\.general/pull/8257](https\://github\.com/ansible\-collections/community\.general/pull/8257)\)\. +* ssh\_config \- new feature to set AddKeysToAgent option to yes or no \([https\://github\.com/ansible\-collections/community\.general/pull/7703](https\://github\.com/ansible\-collections/community\.general/pull/7703)\)\. +* ssh\_config \- new feature to set IdentitiesOnly option to yes or no \([https\://github\.com/ansible\-collections/community\.general/pull/7704](https\://github\.com/ansible\-collections/community\.general/pull/7704)\)\. +* sudoers \- add support for the NOEXEC tag in sudoers rules \([https\://github\.com/ansible\-collections/community\.general/pull/7983](https\://github\.com/ansible\-collections/community\.general/pull/7983)\)\. +* svr4pkg \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* swdepot \- refactor module to pass list of arguments to module\.run\_command\(\) instead of relying on interpretation by a shell \([https\://github\.com/ansible\-collections/community\.general/pull/8264](https\://github\.com/ansible\-collections/community\.general/pull/8264)\)\. +* terraform \- add support for diff\_mode for terraform resource\_changes \([https\://github\.com/ansible\-collections/community\.general/pull/7896](https\://github\.com/ansible\-collections/community\.general/pull/7896)\)\. +* terraform \- fix diff\_mode in state absent and when terraform resource\_changes does not exist \([https\://github\.com/ansible\-collections/community\.general/pull/7963](https\://github\.com/ansible\-collections/community\.general/pull/7963)\)\. +* xcc\_redfish\_command \- added support for raw POSTs \(command\=PostResource in category\=Raw\) without a specific action info \([https\://github\.com/ansible\-collections/community\.general/pull/7746](https\://github\.com/ansible\-collections/community\.general/pull/7746)\)\. +* xfconf \- use ModuleHelper with VarDict \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. +* xfconf\_info \- use ModuleHelper with VarDict \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. + + +#### community\.grafana + +* Add Quickwit search engine datasource \([https\://quickwit\.io](https\://quickwit\.io)\)\. +* Add new module grafana\_silence to create and delete silences through the API +* Add parameter org\_name to grafana\_dashboard +* Add parameter org\_name to grafana\_datasource +* Add parameter org\_name to grafana\_organization\_user +* Add role components for grafana\_silence module +* Add support for Grafana Tempo datasource type \([https\://grafana\.com/docs/grafana/latest/datasources/tempo/](https\://grafana\.com/docs/grafana/latest/datasources/tempo/)\) +* Manage grafana\_folder for organizations +* Merged ansible role telekom\-mms/ansible\-role\-grafana into ansible\-collections/community\.grafana +* added community\.grafana\.notification\_channel to role +* default to true/false in docs and code +* grafana\_dashboard \- add check\_mode support +* lookup \- grafana\_dashboards \- add validate\_certs and ca\_path options to plugin for custom certs validation + + +#### community\.hashi\_vault + +* cert auth \- add option to set the cert\_auth\_public\_key and cert\_auth\_private\_key parameters using the variables ansible\_hashi\_vault\_cert\_auth\_public\_key and ansible\_hashi\_vault\_cert\_auth\_private\_key \([https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428](https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428)\)\. + + +#### community\.hrobot + +* robot inventory plugin \- add filter option which allows to include and exclude hosts based on Jinja2 conditions \([https\://github\.com/ansible\-collections/community\.hrobot/pull/101](https\://github\.com/ansible\-collections/community\.hrobot/pull/101)\)\. +* robot inventory plugin \- the filters option has been renamed to simple\_filters\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the community\.library\_inventory\_filtering\_v1 collection\'s functionality \([https\://github\.com/ansible\-collections/community\.hrobot/pull/94](https\://github\.com/ansible\-collections/community\.hrobot/pull/94)\)\. + + +#### community\.mysql + +* mysql\_user \- add the password\_expire and password\_expire\_interval arguments to implement the password expiration management for mysql user \([https\://github\.com/ansible\-collections/community\.mysql/pull/598](https\://github\.com/ansible\-collections/community\.mysql/pull/598)\)\. +* mysql\_user \- add user attribute support via the attributes parameter and return value \([https\://github\.com/ansible\-collections/community\.mysql/pull/604](https\://github\.com/ansible\-collections/community\.mysql/pull/604)\)\. + + +#### community\.postgresql + +* postgresql\_db \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/614](https\://github\.com/ansible\-collections/community\.postgresql/issues/614)\)\. +* postgresql\_db \- add the icu\_locale argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\. +* postgresql\_db \- add the locale\_provider argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\. +* postgresql\_ext \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. +* postgresql\_publication \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. +* postgresql\_schema \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. +* postgresql\_subscription \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. +* postgresql\_tablespace \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. + + +#### community\.rabbitmq + +* rabbitmq\_user \- add support to user manipulation through RabbitMQ API \([https\://github\.com/ansible\-collections/community\.rabbitmq/issues/76](https\://github\.com/ansible\-collections/community\.rabbitmq/issues/76)\) + + +#### community\.routeros + +* api\_info\, api\_modify \- Add RouterOS 7\.x support to /mpls ldp path \([https\://github\.com/ansible\-collections/community\.routeros/pull/271](https\://github\.com/ansible\-collections/community\.routeros/pull/271)\)\. +* api\_info\, api\_modify \- add /ip route rule path for RouterOS 6\.x \([https\://github\.com/ansible\-collections/community\.routeros/pull/278](https\://github\.com/ansible\-collections/community\.routeros/pull/278)\)\. +* api\_info\, api\_modify \- add /routing filter path for RouterOS 6\.x \([https\://github\.com/ansible\-collections/community\.routeros/pull/279](https\://github\.com/ansible\-collections/community\.routeros/pull/279)\)\. +* api\_info\, api\_modify \- add interface ovpn\-client path \([https\://github\.com/ansible\-collections/community\.routeros/issues/242](https\://github\.com/ansible\-collections/community\.routeros/issues/242)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/244](https\://github\.com/ansible\-collections/community\.routeros/pull/244)\)\. +* api\_info\, api\_modify \- add radius path \([https\://github\.com/ansible\-collections/community\.routeros/issues/241](https\://github\.com/ansible\-collections/community\.routeros/issues/241)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/245](https\://github\.com/ansible\-collections/community\.routeros/pull/245)\)\. +* api\_info\, api\_modify \- add routing rule path \([https\://github\.com/ansible\-collections/community\.routeros/issues/162](https\://github\.com/ansible\-collections/community\.routeros/issues/162)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/246](https\://github\.com/ansible\-collections/community\.routeros/pull/246)\)\. +* api\_info\, api\_modify \- add default value for from\-pool field in /ipv6 address \([https\://github\.com/ansible\-collections/community\.routeros/pull/270](https\://github\.com/ansible\-collections/community\.routeros/pull/270)\)\. +* api\_info\, api\_modify \- add missing DoH parameters doh\-max\-concurrent\-queries\, doh\-max\-server\-connections\, and doh\-timeout to the ip dns path \([https\://github\.com/ansible\-collections/community\.routeros/issues/230](https\://github\.com/ansible\-collections/community\.routeros/issues/230)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/235](https\://github\.com/ansible\-collections/community\.routeros/pull/235)\) +* api\_info\, api\_modify \- add missing parameters address\-list\, address\-list\-timeout\, randomise\-ports\, and realm to subpaths of the ip firewall path \([https\://github\.com/ansible\-collections/community\.routeros/issues/236](https\://github\.com/ansible\-collections/community\.routeros/issues/236)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/237](https\://github\.com/ansible\-collections/community\.routeros/pull/237)\)\. +* api\_info\, api\_modify \- add missing path /interface pppoe\-server server \([https\://github\.com/ansible\-collections/community\.routeros/pull/273](https\://github\.com/ansible\-collections/community\.routeros/pull/273)\)\. +* api\_info\, api\_modify \- add missing path /ip dhcp\-relay \([https\://github\.com/ansible\-collections/community\.routeros/pull/276](https\://github\.com/ansible\-collections/community\.routeros/pull/276)\)\. +* api\_info\, api\_modify \- add missing path /queue simple \([https\://github\.com/ansible\-collections/community\.routeros/pull/269](https\://github\.com/ansible\-collections/community\.routeros/pull/269)\)\. +* api\_info\, api\_modify \- add missing path /queue type \([https\://github\.com/ansible\-collections/community\.routeros/pull/274](https\://github\.com/ansible\-collections/community\.routeros/pull/274)\)\. +* api\_info\, api\_modify \- add missing path routing bgp template \([https\://github\.com/ansible\-collections/community\.routeros/pull/243](https\://github\.com/ansible\-collections/community\.routeros/pull/243)\)\. +* api\_info\, api\_modify \- add missing paths /routing bgp aggregate\, /routing bgp network and /routing bgp peer \([https\://github\.com/ansible\-collections/community\.routeros/pull/277](https\://github\.com/ansible\-collections/community\.routeros/pull/277)\)\. +* api\_info\, api\_modify \- add read\-only fields installed\-version\, latest\-version and status in system package update \([https\://github\.com/ansible\-collections/community\.routeros/pull/263](https\://github\.com/ansible\-collections/community\.routeros/pull/263)\)\. +* api\_info\, api\_modify \- add support for paths /mpls interface\, /mpls ldp accept\-filter\, /mpls ldp advertise\-filter and mpls ldp interface \([https\://github\.com/ansible\-collections/community\.routeros/pull/272](https\://github\.com/ansible\-collections/community\.routeros/pull/272)\)\. +* api\_info\, api\_modify \- add support for the tx\-power attribute in interface wireless \([https\://github\.com/ansible\-collections/community\.routeros/pull/239](https\://github\.com/ansible\-collections/community\.routeros/pull/239)\)\. +* api\_info\, api\_modify \- added support for interface wifi and its sub\-paths \([https\://github\.com/ansible\-collections/community\.routeros/pull/266](https\://github\.com/ansible\-collections/community\.routeros/pull/266)\)\. +* api\_info\, api\_modify \- make path user group modifiable and add comment attribute \([https\://github\.com/ansible\-collections/community\.routeros/issues/256](https\://github\.com/ansible\-collections/community\.routeros/issues/256)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/257](https\://github\.com/ansible\-collections/community\.routeros/pull/257)\)\. +* api\_info\, api\_modify \- mark the interface wireless parameter running as read\-only \([https\://github\.com/ansible\-collections/community\.routeros/pull/233](https\://github\.com/ansible\-collections/community\.routeros/pull/233)\)\. +* api\_info\, api\_modify \- remove default value for read\-only running field in interface wireless \([https\://github\.com/ansible\-collections/community\.routeros/pull/264](https\://github\.com/ansible\-collections/community\.routeros/pull/264)\)\. +* api\_info\, api\_modify \- removed host primary key in tool netwatch path \([https\://github\.com/ansible\-collections/community\.routeros/pull/248](https\://github\.com/ansible\-collections/community\.routeros/pull/248)\)\. +* api\_info\, api\_modify \- set the default value to false for the disabled parameter in some more paths where it can be seen in the documentation \([https\://github\.com/ansible\-collections/community\.routeros/pull/237](https\://github\.com/ansible\-collections/community\.routeros/pull/237)\)\. +* api\_modify \- add missing comment attribute to /routing id \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. +* api\_modify \- add missing attributes to the routing bgp connection path \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. +* api\_modify \- add versioning to the /tool e\-mail path \(RouterOS 7\.12 release\) \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. +* api\_modify \- make /ip traffic\-flow target a multiple value attribute \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. +* api\_modify\, api\_info \- add support for the ip vrf path in RouterOS 7 \([https\://github\.com/ansible\-collections/community\.routeros/pull/259](https\://github\.com/ansible\-collections/community\.routeros/pull/259)\) +* api\_modify\, api\_info \- added support for interface wifiwave2 \([https\://github\.com/ansible\-collections/community\.routeros/pull/226](https\://github\.com/ansible\-collections/community\.routeros/pull/226)\)\. + + +#### community\.vmware + +* Add standard function vmware\_argument\_spec\(\) from module\_utils for using default env fallback function\. [https\://github\.com/ansible\-collections/community\.vmware/issues/1977](https\://github\.com/ansible\-collections/community\.vmware/issues/1977) +* Document that all parameters and VMware object names are case sensitive \([https\://github\.com/ansible\-collections/community\.vmware/issues/2019](https\://github\.com/ansible\-collections/community\.vmware/issues/2019)\)\. +* Drop the outdated \(and actually unmaintained\) scenario guides \([https\://github\.com/ansible\-collections/community\.vmware/pull/2022](https\://github\.com/ansible\-collections/community\.vmware/pull/2022)\)\. +* vmware\_dvs\_portgroup \- Make state default to present instead of having it as a required parameter \([https\://github\.com/ansible\-collections/community\.vmware/pull/2055](https\://github\.com/ansible\-collections/community\.vmware/pull/2055)\)\. +* vmware\_dvswitch \- Add switchIpAddress/switch\_ip parameter for netflow config +* vmware\_first\_class\_disk\_info \- Add a module to gather informations about first class disks\. \([https\://github\.com/ansible\-collections/community\.vmware/pull/1996](https\://github\.com/ansible\-collections/community\.vmware/pull/1996)\)\. \([https\://github\.com/ansible\-collections/community\.vmware/issues/1988](https\://github\.com/ansible\-collections/community\.vmware/issues/1988)\)\. +* vmware\_guest \- Add IPv6 support for VM network interfaces \([https\://github\.com/ansible\-collections/community\.vmware/pull/1937](https\://github\.com/ansible\-collections/community\.vmware/pull/1937)\)\. +* vmware\_guest\_sendkey \- Add Windows key \([https\://github\.com/ansible\-collections/community\.vmware/issues/1959](https\://github\.com/ansible\-collections/community\.vmware/issues/1959)\)\. +* vmware\_guest\_tools\_info \- Use toolsVersionStatus2 instead of toolsVersionStatus \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\. +* vmware\_guest\_tools\_upgrade \- Add parameter installer\_options to pass command line options to the installer to modify the installation procedure for tools \([https\://github\.com/ansible\-collections/community\.vmware/pull/1059](https\://github\.com/ansible\-collections/community\.vmware/pull/1059)\)\. +* vmware\_host\_facts \- Add the possibility to get the related datacenter\. \([https\://github\.com/ansible\-collections/community\.vmware/pull/1994](https\://github\.com/ansible\-collections/community\.vmware/pull/1994)\)\. +* vmware\_vm\_inventory \- Add parameter subproperties \([https\://github\.com/ansible\-collections/community\.vmware/pull/1972](https\://github\.com/ansible\-collections/community\.vmware/pull/1972)\)\. +* vmware\_vmkernel \- Add the function to set the enable\_backup\_nfc setting \([https\://github\.com/ansible\-collections/community\.vmware/pull/1978](https\://github\.com/ansible\-collections/community\.vmware/pull/1978)\) +* vsphere\_copy \- Add parameter to tell vsphere\_copy which diskformat is being uploaded \([https\://github\.com/ansible\-collections/community\.vmware/pull/1995](https\://github\.com/ansible\-collections/community\.vmware/pull/1995)\)\. + + +#### community\.windows + +* Set minimum supported Ansible version to 2\.14 to align with the versions still supported by Ansible\. +* win\_regmerge \- Add content \'content\' parameter for specifying registry file contents directly + + +#### community\.zabbix + +* Add slash at the end of the location directives\, to prevent path traversal attacks\. +* Added active\_since and active\_till in zabbix\_maintenance +* Added content\_type for email in zabbix\_mediatypes +* Added zabbix\_group\_events\_info module +* Introduce flag enable\_version\_check to allow installations on non\-supported platforms\. +* action module \- Added notify\_if\_canceled property +* agent and proxy roles \- Set default zabbix\_api\_server\_port to 80 or 443 based on zabbix\_api\_use\_ssl +* agent role \- Removed duplicative Windows agent task +* agent role \- Standardized default yum priority to 99 +* agent\, javagateway\, proxy\, server\, and web role \- added the http\_proxy and https\_proxy environment variables to \"Debian \| Download gpg key\" analog to other tasks +* agent\, javagateway\, proxy\, server\, and web role \- introduced default variable zabbix\_repo\_deb\_gpg\_key\_url with value [http\://repo\.zabbix\.com/zabbix\-official\-repo\.key](http\://repo\.zabbix\.com/zabbix\-official\-repo\.key) +* agent\, javagateway\, proxy\, server\, and web role \- introduced default variable zabbix\_repo\_deb\_include\_deb\_src with value true +* agent\, javagateway\, proxy\, server\, and web role \- removed superfluous slash in zabbix\_gpg\_key of the Debian vars and renamed key to zabbix\-repo instead of zabbix\-official\-repo +* agent\, javagateway\, proxy\, server\, and web role \- used variable zabbix\_repo\_deb\_include\_deb\_src in \"Debian \| Installing repository\" to determine whether deb\-src should be added to /etc/apt/sources\.list\.d/zabbix\.sources +* agent\, javagateway\, proxy\, server\, and web role \- used zabbix\_repo\_deb\_gpg\_key\_url in \"Debian \| Download gpg key\" instead of hardcoded url +* all roles \- Re\-added ability to override Debian repo source +* all roles \- Updated Debian repository format to 822 standard +* api\_requests \- Handled error from depricated CertificateError class +* multiple roles \- Removed unneeded Apt Clean commands\. +* proxy role \- Updated MariaDB version for Centos 7 to 10\.11 +* various \- updated testing modules +* various \- updated to fully qualified module names +* zabbix agent \- Added capability to add additional configuration includes +* zabbix web \- Allowed the independent configuration of php\-fpm without creating vhost\. +* zabbix\_api\_info module added +* zabbix\_correlation module added +* zabbix\_host\_info \- added ability to get all the hosts configured in Zabbix +* zabbix\_proxy role \- Add variable zabbix\_proxy\_dbpassword\_hash\_method to control whether you want postgresql user password to be hashed with md5 or want to use db default\. When zabbix\_proxy\_dbpassword\_hash\_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram\-sha\-256 hashing method\. +* zabbix\_server role \- Add variable zabbix\_server\_dbpassword\_hash\_method to control whether you want postgresql user password to be hashed with md5 or want to use db default\. When zabbix\_server\_dbpassword\_hash\_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram\-sha\-256 hashing method\. +* zabbix\_service\_info module added +* zabbix\_template \- Add template\_yaml parameter\. +* zabbix\_templategroup module added +* zabbix\_user module \- add current\_passwd optional parameter to enable password updating of the currently logged in user \([https\://www\.zabbix\.com/documentation/6\.4/en/manual/api/reference/user/update](https\://www\.zabbix\.com/documentation/6\.4/en/manual/api/reference/user/update)\) +* zabbix\_web role\, Refactored zabbix\_selinux variable names to correlate with selinux boolean names\. + + +#### containers\.podman + +* Add log\_opt and annotaion options to podman\_play module +* Add option to parse CreateCommand easily for diff calc +* Add support for setting underlying interface in podman\_network +* Alias generate systemd options stop\_timeout and time +* CI \- Fix rootfs test in CI +* CI \- add custom podman path to tasks +* CI \- add parametrized executables to tests +* Fix CI rootfs for podman\_container +* Fix broken conmon version in CI install +* Improve security\_opt comparison between existing container +* podman\_container \- Add new arguments to podman status commands +* podman\_container \- Add pasta as default network mode after v5 +* podman\_container \- Update env\_file to accept a list of files instead of a single file +* podman\_container\_exec \- Return data for podman exec module +* podman\_generate\_systemd \- Fix broken example for podman\_generate\_systemd \(\#708\) +* podman\_login \- Update podman\_login\.py +* podman\_play \- Add support for kube yaml files with multi\-documents \(\#724\) +* podman\_play \- Update the logic for deleting pods/containers in podman\_play +* podman\_pod\_info \- handle return being list in Podman 5 \(\#713\) +* podman\_secret\_info \- Add secrets info module + + +#### dellemc\.enterprise\_sonic + +* sonic\_aaa \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304)\)\. +* sonic\_aaa \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_acl\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306)\)\. +* sonic\_acl\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_bgp\_as\_paths \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/290](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/290)\)\. +* sonic\_bgp\_communities \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/251](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/251)\)\. +* sonic\_bgp\_ext\_communities \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/252](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/252)\)\. +* sonic\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301)\)\. +* sonic\_interfaces \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. +* sonic\_interfaces \- Change deleted design for interfaces module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/310](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/310)\)\. +* sonic\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_ip\_neighbor \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285)\)\. +* sonic\_ip\_neighbor \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_l2\_acls \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306)\)\. +* sonic\_l2\_acls \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_l2\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303)\)\. +* sonic\_l2\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_l3\_acls \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306)\)\. +* sonic\_l3\_acls \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_l3\_interfaces \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/241](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/241)\)\. +* sonic\_lag\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303)\)\. +* sonic\_lag\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_logging \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285)\)\. +* sonic\_logging \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_mclag \- Add VLAN range support for \'unique\_ip\' and \'peer\_gateway\' options \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288)\)\. +* sonic\_mclag \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288)\)\. +* sonic\_ntp \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281)\)\. +* sonic\_ntp \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_port\_breakout \- Add Ansible support for all port breakout modes now allowed in Enterprise SONiC \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/276](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/276)\)\. +* sonic\_port\_breakout \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/291](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/291)\)\. +* sonic\_port\_group \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284)\)\. +* sonic\_port\_group \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_radius\_server \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/279](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/279)\)\. +* sonic\_radius\_server \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_static\_routes \- Add playbook check and diff modes support for static routes resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/313](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/313)\)\. +* sonic\_static\_routes \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_system \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284)\)\. +* sonic\_system \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_tacacs\_server \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281)\)\. +* sonic\_tacacs\_server \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_users \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304)\)\. +* sonic\_users \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_vlans \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301)\)\. +* sonic\_vlans \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* sonic\_vrfs \- Add mgmt VRF replaced state handling to sonic\_vrfs module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/298](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/298)\)\. +* sonic\_vrfs \- Add mgmt VRF support to sonic\_vrfs module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/293](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/293)\)\. +* sonic\_vrfs \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285)\)\. +* sonic\_vrfs \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. +* tests \- Add UTs for BFD\, COPP\, and MAC modules \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/287](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/287)\)\. +* tests \- Enable contiguous execution of all regression integration tests on an S5296f \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/277](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/277)\)\. +* tests \- Fix the bgp CLI test base\_cfg\_path derivation of the bgp role\_path by avoiding relative pathing from the possibly external playbook\_dir \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/283](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/283)\)\. + + +#### dellemc\.openmanage + +* Ansible lint issues are fixed for the collections\. +* For idrac\_certificate role\, added support for import operation of HTTPS certificate with the SSL key\. +* For idrac\_certificates module\, below enhancements are made\: Added support for import operation of HTTPS certificate with the SSL key\. The email\_address has been made as an optional parameter\. +* For idrac\_gather\_facts role\, added storage controller details in the role output\. +* Module redfish\_storage\_volume is enhanced to support reboot options and job tracking operation\. +* idrac\_reset \- This module allows you to reset the iDRAC to factory default settings\. +* redfish\_storage\_volume \- This module is enhanced to support iDRAC8\. + + +#### dellemc\.powerflex + +* Added support for PowerFlex Denver version\(4\.5\.x\) to TB and Config role\. +* Added support for PowerFlex ansible modules and roles on Azure\. +* Added support for executing Ansible PowerFlex modules and roles on AWS environment\. +* Added support for resource group provisioning to validate\, deploy\, edit\, add nodes and delete a resource group\. +* The Info module is enhanced to list the firmware repositories\. +* The Info module is enhanced to retrieve lists related to fault sets\, service templates\, deployments\, and managed devices\. +* The SDS module has been enhanced to facilitate SDS creation within a fault set\. + + +#### f5networks\.f5\_modules + +* bigiq\_device\_discovery \- Changes in documentation related to Provider block + + +#### fortinet\.fortimanager + +* Added deprecated warning to invalid argument name\, please change the invalid argument name such as \"var\-name\"\, \"var name\" to \"var\_name\"\. +* Renamed the input argument \"message\" to \"fmgr\_message\" to comply with Ansible requirements\. +* Supported fortimanager 7\.4\.2\, 21 new modules\. + + +#### google\.cloud + +* anisble\-test \- integration tests are now run against 2\.14\.0 and 2\.15\.0 +* ansible \- 2\.14\.0 is now the minimum version supported +* ansible\-lint \- fixed over a thousand reported errors +* ansible\-lint \- upgraded to 6\.22 +* ansible\-test \- add support for GCP application default credentials \([https\://github\.com/ansible\-collections/google\.cloud/issues/359](https\://github\.com/ansible\-collections/google\.cloud/issues/359)\)\. +* gcp\_serviceusage\_service \- added backoff when checking for operation completion\. +* gcp\_serviceusage\_service \- use alloyb API for the integration test as spanner conflicts with other tests +* gcp\_sql\_ssl\_cert \- made sha1\_fingerprint optional\, which enables resource creation +* gcp\_storage\_default\_object\_acl \- removed non\-existent fields\; the resource is not usable\. + + +#### grafana\.grafana + +* Add \'run\_once\' to download\&unzip tasks by \@v\-zhuravlev in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/136](https\://github\.com/grafana/grafana\-ansible\-collection/pull/136) +* Adding oauth\_allow\_insecure\_email\_lookup to fix oauth user sync error by \@hypery2k in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/132](https\://github\.com/grafana/grafana\-ansible\-collection/pull/132) +* Bump ansible\-core from 2\.15\.4 to 2\.15\.8 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/137](https\://github\.com/grafana/grafana\-ansible\-collection/pull/137) +* Bump ansible\-lint from 24\.2\.0 to 24\.2\.1 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/164](https\://github\.com/grafana/grafana\-ansible\-collection/pull/164) +* Bump ansible\-lint from 24\.2\.0 to 24\.2\.1 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/168](https\://github\.com/grafana/grafana\-ansible\-collection/pull/168) +* Bump ansible\-lint from 6\.13\.1 to 6\.14\.3 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/139](https\://github\.com/grafana/grafana\-ansible\-collection/pull/139) +* Bump ansible\-lint from 6\.14\.3 to 6\.22\.2 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/142](https\://github\.com/grafana/grafana\-ansible\-collection/pull/142) +* Bump ansible\-lint from 6\.22\.2 to 24\.2\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/150](https\://github\.com/grafana/grafana\-ansible\-collection/pull/150) +* Bump black from 24\.1\.1 to 24\.3\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/165](https\://github\.com/grafana/grafana\-ansible\-collection/pull/165) +* Bump cryptography from 41\.0\.4 to 41\.0\.6 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/126](https\://github\.com/grafana/grafana\-ansible\-collection/pull/126) +* Bump jinja2 from 3\.1\.2 to 3\.1\.3 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/129](https\://github\.com/grafana/grafana\-ansible\-collection/pull/129) +* Bump pylint from 2\.16\.2 to 3\.0\.3 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/141](https\://github\.com/grafana/grafana\-ansible\-collection/pull/141) +* Bump pylint from 3\.0\.3 to 3\.1\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/158](https\://github\.com/grafana/grafana\-ansible\-collection/pull/158) +* Bump pylint from 3\.0\.3 to 3\.1\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/161](https\://github\.com/grafana/grafana\-ansible\-collection/pull/161) +* Bump the pip group across 1 directories with 1 update by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/156](https\://github\.com/grafana/grafana\-ansible\-collection/pull/156) +* Bump yamllint from 1\.29\.0 to 1\.33\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/140](https\://github\.com/grafana/grafana\-ansible\-collection/pull/140) +* Bump yamllint from 1\.29\.0 to 1\.33\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/143](https\://github\.com/grafana/grafana\-ansible\-collection/pull/143) +* Bump yamllint from 1\.33\.0 to 1\.34\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/151](https\://github\.com/grafana/grafana\-ansible\-collection/pull/151) +* Bump yamllint from 1\.33\.0 to 1\.35\.1 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/155](https\://github\.com/grafana/grafana\-ansible\-collection/pull/155) +* Bump yamllint from 1\.33\.0 to 1\.35\.1 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/159](https\://github\.com/grafana/grafana\-ansible\-collection/pull/159) +* Change handler to systemd by \@v\-zhuravlev in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/135](https\://github\.com/grafana/grafana\-ansible\-collection/pull/135) +* Clarify grafana\-server configuration in README by \@VGerris in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/177](https\://github\.com/grafana/grafana\-ansible\-collection/pull/177) +* Drop curl check by \@v\-zhuravlev in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/120](https\://github\.com/grafana/grafana\-ansible\-collection/pull/120) +* ExecStartPre and EnvironmentFile settings to system unit file by \@fabiiw05 in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/157](https\://github\.com/grafana/grafana\-ansible\-collection/pull/157) +* Fix check mode for grafana role by \@Boschung\-Mecatronic\-AG\-Infrastructure in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/125](https\://github\.com/grafana/grafana\-ansible\-collection/pull/125) +* Fix check mode in Grafana Agent by \@AmandaCameron in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/124](https\://github\.com/grafana/grafana\-ansible\-collection/pull/124) +* Fix links in grafana\_agent/defaults/main\.yaml by \@PabloCastellano in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/134](https\://github\.com/grafana/grafana\-ansible\-collection/pull/134) +* Topic/grafana agent idempotency by \@ohdearaugustin in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/147](https\://github\.com/grafana/grafana\-ansible\-collection/pull/147) +* Update description to match module by \@brmurphy in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/179](https\://github\.com/grafana/grafana\-ansible\-collection/pull/179) +* Update tags in README by \@ishanjainn in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/121](https\://github\.com/grafana/grafana\-ansible\-collection/pull/121) +* datasources url parameter fix by \@dergudzon in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/162](https\://github\.com/grafana/grafana\-ansible\-collection/pull/162) + + +#### hetzner\.hcloud + +* Add the hetzner\.hcloud\.all group to configure all the modules using module\_defaults\. +* Allow to set the api\_endpoint module argument using the HCLOUD\_ENDPOINT environment variable\. +* Removed the hcloud\_ prefix from all modules names\, e\.g\. hetzner\.hcloud\.hcloud\_firewall was renamed to hetzner\.hcloud\.firewall\. Old module names will continue working\. +* Renamed the endpoint module argument to api\_endpoint\, backward compatibility is maintained using an alias\. +* Replace deprecated ansible\.netcommon ip utils with python ipaddress module\. The ansible\.netcommon collection is no longer required by the collections\. +* firewall \- Allow forcing the deletion of firewalls that are still in use\. +* firewall \- Do not silence \'firewall still in use\' delete failures\. +* firewall \- Return resources the firewall is applied\_to\. +* firewall\_info \- Add new firewall\_info module to gather firewalls info\. +* firewall\_resource \- Add new firewall\_resource module to manage firewalls resources\. +* hcloud inventory \- Add the api\_endpoint option\. +* hcloud inventory \- Deprecate the api\_token\_env option\, suggest using a lookup plugin \(\{\{ lookup\(\'ansible\.builtin\.env\'\, \'YOUR\_ENV\_VAR\'\) \}\}\) or use the well\-known HCLOUD\_TOKEN environment variable name\. +* hcloud inventory \- Rename the token\_env option to api\_token\_env\, use aliases for backward compatibility\. +* hcloud inventory \- Rename the token option to api\_token\, use aliases for backward compatibility\. +* inventory \- Add hostname option used to template the hostname of the instances\. +* inventory \- Add hostvars\_prefix and hostvars\_suffix\` options to customize the inventory host variables keys\. +* network \- Allow renaming networks\. +* primary\_ip \- Use the server option to assign a Primary IP being created to a server\. +* server \- Allow passing Datacenter name or ID to the datacenter argument\. +* server \- Allow passing Image name or ID to the image argument\. +* server \- Allow passing Location name or ID to the location argument\. +* server \- Allow passing SSH Keys names or IDs to the ssh\_keys argument\. +* server \- Allow passing Volume names or IDs to the volumes argument\. +* server \- Renamed the allow\_deprecated\_image option to image\_allow\_deprecated\. + + +#### ibm\.storage\_virtualize + +* ibm\_sv\_manage\_replication\_policy \- Added support to configure a 2\-site\-ha policy\. +* ibm\_sv\_manage\_snapshot \- Added support to restore entire volumegroup from a snapshot of that volumegroup\. +* ibm\_sv\_manage\_snapshot \- Added support to restore subset of volumes of a volumegroup from a snapshot +* ibm\_svc\_host \- Added support to create nvmetcp host\. +* ibm\_svc\_info \- Added support to display information about partition\, quorum\, IO group\, VG replication and enclosure\, snmp server and ldap server +* ibm\_svc\_info \- Added support to display information about thinclone/clone volumes and volumegroups\. +* ibm\_svc\_manage\_volume \- Added support to create clone or thinclone from snapshot +* ibm\_svc\_manage\_volumgroup \- Added support to create clone or thinkclone volumegroup from snapshot from a subset of volumes +* ibm\_svc\_manage\_volumgroup \- Added support to delete volumegroups keeping volumes via \'evictvolumes\'\. + + +#### inspur\.ispim + +* Modify ansible\-test\.yml to add the ansible 2\.17 test [https\://github\.com/ispim/inspur\.ispim/pull/33](https\://github\.com/ispim/inspur\.ispim/pull/33)\. +* Modify ansible\-test\.yml to add the ansible2\.16 test\. +* Modify edit\_smtp\_com and add description information\. + + +#### junipernetworks\.junos + +* 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](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/618)\)\. +* cli\_restore module is part of netcommon\. + + +#### kubernetes\.core + +* helm \- add reuse\_values and reset\_values support to helm module \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/394](https\://github\.com/ansible\-collections/kubernetes\.core/issues/394)\)\. +* k8s \- add new option delete\_all to support deletion of all resources when state is set to absent\. \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/504](https\://github\.com/ansible\-collections/kubernetes\.core/issues/504)\) +* k8s\, k8s\_info \- add a hidden\_fields option to allow fields to be hidden in the results of k8s and k8s\_info +* k8s\_drain \- add ability to filter the list of pods to be drained by a pod label selector \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/474](https\://github\.com/ansible\-collections/kubernetes\.core/issues/474)\)\. +* kubectl \- added support of local enviroment variable that will be used for kubectl and may be requried for establishing connections ifself \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/702](https\://github\.com/ansible\-collections/kubernetes\.core/pull/702)\) +* kustomize \- new parameter added to \-\-enable\-helm \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/568](https\://github\.com/ansible\-collections/kubernetes\.core/issues/568)\) + + +#### lowlydba\.sqlserver + +* Add ability to prevent changing login\'s password\, even if password supplied\. +* Add new input strings to be compatible with dbops v0\.9\.x \([https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/231](https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/231)\) + + +#### microsoft\.ad + +* Added group/microsoft\.ad\.domain module defaults group for the computer\, group\, object\_info\, object\, ou\, and user module\. Users can use this defaults group to set common connection options for these modules such as the domain\_server\, domain\_username\, and domain\_password options\. +* Added support for Jinja2 templating in ldap inventory\. +* Make name an optional parameter for the AD modules\. Either name or identity needs to be set with their respective behaviours\. If creating a new AD user and only identity is set\, that will be the value used for the name of the object\. +* Set minimum supported Ansible version to 2\.14 to align with the versions still supported by Ansible\. +* object\_info \- Add ActiveDirectory module import + + +#### netapp\.ontap + +* na\_ontap\_cifs \- new option offline\_files added in REST\, requires ONTAP 9\.10 or later\. +* na\_ontap\_cifs\_server \- new option is\_multichannel\_enabled added in REST\, requires ONTAP 9\.10 or later\. +* na\_ontap\_cifs\_server \- new option lm\_compatibility\_level added in REST\, requires ONTAP 9\.8 or later\. +* na\_ontap\_cluster \- new option certificate\.uuid added in REST\, requires ONTAP 9\.10 or later\. +* na\_ontap\_cluster\_peer \- added REST only support for modifying remote intercluster addresses in cluster peer relation\. +* na\_ontap\_ems\_destination \- new options syslog\, port\, transport\, message\_format\, timestamp\_format\_override and hostname\_format\_override added in REST\, requires ONTAP 9\.12\.1 or later\. +* na\_ontap\_export\_policy\_rule \- added actions and modify in module output\. +* na\_ontap\_file\_security\_permissions\_acl \- added actions and modify in module output\. +* na\_ontap\_igroup\_initiator \- added actions in module output\. +* na\_ontap\_lun\_map \- added actions in module output\. +* na\_ontap\_lun\_map\_reporting\_nodes \- added actions in module output\. +* na\_ontap\_name\_mappings \- added actions and modify in module output\. +* na\_ontap\_net\_ifgrp \- updated documentation for parameter name\. +* na\_ontap\_node \- added modify in module output\. +* na\_ontap\_rest\_info \- added warning message if given subset doesn\'t support option owning\_resource\. +* na\_ontap\_s3\_services \- create\, modify S3 service returns s3\_service\_info in module output\. +* na\_ontap\_snapmirror \- updated resync and resume operation for synchronous snapmirror relationship in REST\. +* na\_ontap\_storage\_auto\_giveback \- added information on modified attributes in module output\. +* na\_ontap\_vscan\_scanner\_pool \- added REST support to Vscan Scanner Pools Configuration module\, requires ONTAP 9\.6 or later\. +* na\_ontap\_vserver\_audit \- new options schedule\.\* added under log\.rotation\, requires ONTAP 9\.6 or later\. + + +#### netapp\.storagegrid + +* na\_sg\_grid\_account \- New option allow\_select\_object\_content for enabling use of the S3 SelectObjectContent API\. +* na\_sg\_grid\_account \- New option description for setting additional identifying information for the tenant account\. + + +#### netbox\.netbox + +* CI \- CI adjustments \[\#1154\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1154](https\://github\.com/netbox\-community/ansible\_modules/pull/1154)\) \[\#1155\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1155](https\://github\.com/netbox\-community/ansible\_modules/pull/1155)\) \[\#1157\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1157](https\://github\.com/netbox\-community/ansible\_modules/pull/1157)\) +* nb\_inventory \- Add Virtual Disks to inventory \[\#1188\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1188](https\://github\.com/netbox\-community/ansible\_modules/pull/1188)\) +* nb\_inventory \- Add facility group\_by option \[\#1059\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1059](https\://github\.com/netbox\-community/ansible\_modules/pull/1059)\) +* nb\_inventory \- Don\'t extract null values from custom fields \[\#1184\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1184](https\://github\.com/netbox\-community/ansible\_modules/pull/1184)\) +* nb\_inventory \- Enable ansible\-vault strings in config\-context data \[\#1114\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1114](https\://github\.com/netbox\-community/ansible\_modules/pull/1114)\) +* nb\_inventory \- Improve documentation for oob\_ip\_as\_primary\_ip \[\#1218\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1218](https\://github\.com/netbox\-community/ansible\_modules/pull/1218)\) +* nb\_inventory \- Make oob\_ip available regardless of oob\_ip\_as\_primary\_ip option \[\#1211\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1211](https\://github\.com/netbox\-community/ansible\_modules/pull/1211)\) +* nb\_lookup \- Add custom field choice set \[\#1186\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1186](https\://github\.com/netbox\-community/ansible\_modules/pull/1186)\) +* nb\_lookup \- Add endpoint for Virtual Disks \[\#1177\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1177](https\://github\.com/netbox\-community/ansible\_modules/pull/1177)\) +* nb\_lookup \- Add new VPN endpoints for NetBox 3\.7 support \[\#1162\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1162](https\://github\.com/netbox\-community/ansible\_modules/pull/1162)\) +* netbox\_device\_type and netbox\_rack \- Change u\_height to float \[\#1200\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1200](https\://github\.com/netbox\-community/ansible\_modules/pull/1200)\) +* netbox\_export\_templates \- Update documentation \[\#1214\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1214](https\://github\.com/netbox\-community/ansible\_modules/pull/1214)\) +* netbox\_platform \- Add config\_template option to netbox\_platform \[\#1119\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1119](https\://github\.com/netbox\-community/ansible\_modules/pull/1119)\) +* netbox\_power\_port \- Add label \[\#1202\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1202](https\://github\.com/netbox\-community/ansible\_modules/pull/1202)\) +* netbox\_power\_port\_template \- Add option module\_type to netbox\_power\_port\_template \[\#1105\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1105](https\://github\.com/netbox\-community/ansible\_modules/pull/1105)\) +* netbox\_rack\_role \- Add description option \[\#1143\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1143](https\://github\.com/netbox\-community/ansible\_modules/pull/1143)\) +* netbox\_virtual\_disk \- New module \[\#1153\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1153](https\://github\.com/netbox\-community/ansible\_modules/pull/1153)\) +* netbox\_virtual\_machine and netbox\_device \- Add option config\_template \[\#1171\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1171](https\://github\.com/netbox\-community/ansible\_modules/pull/1171)\) + + +#### purestorage\.flasharray + +* all \- distro package added as a pre\-requisite +* multiple \- Remove packaging pre\-requisite\. +* multiple \- Where only REST 2\.x endpoints are used\, convert to REST 2\.x methodology\. +* purefa\_arrayname \- Convert to REST v2 +* purefa\_dns \- Added facility to add a CA certifcate to management DNS and check peer\. +* purefa\_eula \- Only sign if not previously signed\. From REST 2\.30 name\, title and company are no longer required +* purefa\_hg \- Add support to rename existing hostgroup +* purefa\_info \- Add NSID value for NVMe namespace in hosts response +* purefa\_info \- Add is\_local parameter for snapshots +* purefa\_info \- Add performance data for some subsets +* purefa\_info \- Add service\_mode to identify if array is Evergreen//One or standard FlashArray +* purefa\_info \- Add support for controller uptime from Purity//FA 6\.6\.3 +* purefa\_info \- Expose NFS security flavor for policies +* purefa\_info \- Expose cloud capacity details if array is a Cloud Block Store\. +* purefa\_info \- Subset pgroups now also provides a new dict called deleted\_pgroups +* purefa\_inventory \- Convert to REST v2 +* purefa\_ntp \- Convert to REST v2 +* purefa\_offload \- Convert to REST v2 +* purefa\_offload \- Remove nfs as an option when Purity//FA 6\.6\.0 or higher is detected +* purefa\_pg \- Enhance state absent to work on volumes\, hosts and hostgroups +* purefa\_pgsnap \- Module now requires minimum FlashArray Purity//FA 6\.1\.0 +* purefa\_policy \- Add SMB user based enumeration parameter +* purefa\_policy \- Added NFS security flavors for accessing files in the mount point\. +* purefa\_policy \- Remove default setting for nfs\_version to allow for change of version at policy level +* purefa\_ra \- Add present and absent as valid state options +* purefa\_ra \- Add connecting as valid status of RA to perform operations on +* purefa\_ra \- Convert to REST v2 +* purefa\_snap \- Add created\_epoch parameter in response +* purefa\_snap \- Add support for suffix on remote offload snapshots +* purefa\_syslog \- name becomes a required parameter as module converts to full REST 2 support +* purefa\_vnc \- Convert to REST v2 + + +#### purestorage\.flashblade + +* purefb\_bucket \- Add support for public buckets +* purefb\_bucket \- Add support for strict 17a\-4 WORM compliance\. +* purefb\_bucket \- From REST 2\.12 the mode parameter default changes to multi\-site\-writable\. +* purefb\_connect \- Increase Fan\-In and Fan\-Out maximums +* purefb\_ds \- Add force\_bind\_password parameter to allow module to be idempotent\. +* purefb\_fs \- Add group\_ownership parameter from Purity//FB 4\.4\.0\. +* purefb\_fs \- Added SMB Continuous Availability parameter\. Requires REST 2\.12 or higher\. +* purefb\_info \- Added enhanced information for buckets\, filesystems and snapshots\, based on new features in REST 2\.12 +* purefb\_info \- Show array network access policy from Purity//FB 4\.4\.0 +* purefb\_policy \- Add support for network access policies from Purity//FB 4\.4\.0 +* purefb\_s3acc \- Add support for public buckets +* purefb\_s3acc \- Remove default requirements for hard\_limit and default\_hard\_limit + + +#### telekom\_mms\.icinga\_director + +* Extended docs and examples for multiple assign\_filter conditions \([https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/227](https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/227)\) +* Increase sleep to 5 seconds \([https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/245](https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/245)\) + + +#### theforeman\.foreman + +* content\_view\_publish role \- allow passing async and poll to the module \([https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676](https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676)\) +* convert2rhel role \- install convert2rhel from cdn\-public\.redhat\.com\, dropping the requirement of a custom CA cert + + +#### vmware\.vmware\_rest + +* Add requires\_ansible to manifest \([https\://github\.com/ansible\-community/ansible\.content\_builder/pull/76](https\://github\.com/ansible\-community/ansible\.content\_builder/pull/76)\)\. +* Generate action\_groups for the vmware\.vmware\_rest collection \([https\://github\.com/ansible\-community/ansible\.content\_builder/issues/75](https\://github\.com/ansible\-community/ansible\.content\_builder/issues/75)\)\. +* Use 7\.0 U3 API spec to build the modules \([https\://github\.com/ansible\-collections/vmware\.vmware\_rest/pull/449](https\://github\.com/ansible\-collections/vmware\.vmware\_rest/pull/449)\)\. +* Use folder attribute for host and dc module only \([https\://github\.com/ansible\-community/ansible\.content\_builder/pull/79](https\://github\.com/ansible\-community/ansible\.content\_builder/pull/79)\)\. + + +#### vultr\.cloud + +* Added retry on HTTP 504 returned by the API \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/104](https\://github\.com/vultr/ansible\-collection\-vultr/pull/104)\)\. +* Implemented a feature to distinguish resources by region if available\. This allows to have identical name per region e\.g\. a VPC named default in each region\. \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/98](https\://github\.com/vultr/ansible\-collection\-vultr/pull/98)\)\. +* instance \- Added a new param user\_scheme to change user scheme to non\-root on Linux while creating the instance \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/96](https\://github\.com/vultr/ansible\-collection\-vultr/issues/96)\)\. + + +### Breaking Changes / Porting Guide + + +#### Ansible\-core + +* assert \- Nested templating may result in an inability for the conditional to be evaluated\. See the porting guide for more information\. + + +#### amazon\.aws + +* amazon\.aws collection \- Support for ansible\-core \< 2\.15 has been dropped \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2093](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](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](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](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](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](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](https\://github\.com/ansible\-collections/amazon\.aws/pull/2025)\)\. + + +#### cloud\.common + +* Bump minimum Python supported version to 3\.9\. +* Remove support for ansible\-core \< 2\.14\. + + +#### community\.aws + +* 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](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](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/](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](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](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](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](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](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](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\. + + +#### community\.ciscosmb + +* in facts of interface \'bandwith\' changed to \'bandwidth\' + + +#### community\.dns + +* The default for the txt\_character\_encoding options in various modules and plugins changed from octal to decimal \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* inventory plugins \- filters is now no longer an alias of simple\_filters\, but a new\, different option \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* inventory plugins \- the plugin option is now required \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* lookup\, lookup\_as\_dict \- the default for search changed from false \(implicit default for community\.dns 2\.x\.y\) to true \([https\://github\.com/ansible\-collections/community\.dns/issues/200](https\://github\.com/ansible\-collections/community\.dns/issues/200)\, [https\://github\.com/ansible\-collections/community\.dns/pull/201](https\://github\.com/ansible\-collections/community\.dns/pull/201)\)\. + + +#### community\.general + +* cpanm \- the default of the mode option changed from compatibility to new \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* django\_manage \- the module now requires Django \>\= 4\.1 \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* django\_manage \- the module will now fail if virtualenv is specified but no virtual environment exists at that location \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* redfish\_command\, redfish\_config\, redfish\_info \- change the default for timeout from 10 to 60 \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. + + +#### community\.hrobot + +* robot inventory plugin \- filters is now no longer an alias of simple\_filters\, but a new\, different option \([https\://github\.com/ansible\-collections/community\.hrobot/pull/101](https\://github\.com/ansible\-collections/community\.hrobot/pull/101)\)\. + + +#### community\.okd + +* Bump minimum Python suupported version to 3\.9 \([https\://github\.com/openshift/community\.okd/pull/202](https\://github\.com/openshift/community\.okd/pull/202)\)\. +* Remove support for ansible\-core \< 2\.14 \([https\://github\.com/openshift/community\.okd/pull/202](https\://github\.com/openshift/community\.okd/pull/202)\)\. + + +#### hetzner\.hcloud + +* Drop support for ansible\-core 2\.13\. +* certificate \- The not\_valid\_before and not\_valid\_after values are now returned as ISO\-8601 formatted strings\. +* certificate\_info \- The not\_valid\_before and not\_valid\_after values are now returned as ISO\-8601 formatted strings\. +* inventory \- Remove the deprecated api\_token\_env option\, you may use the ansible\.builtin\.env lookup as alternative\. +* iso\_info \- The deprecated value is now returned as ISO\-8601 formatted strings\. + + +#### kubernetes\.core + +* Remove support for ansible\-core \< 2\.14 +* Update python kubernetes library to 24\.2\.0\, helm/kind\-action to 1\.8\.0\, kubernetes \>\= 1\.24\. + + +#### theforeman\.foreman + +* content\_view\_filter \- stop managing rules from this module\, content\_view\_filter\_rule should be used for that +* inventory plugin \- do not default to http\://localhost\:3000 as the Foreman URL\, providing a URL is now mandatory + + +#### vmware\.vmware\_rest + +* Remove support for ansible\-core \< 2\.14 + + +### Deprecated Features + +* The inspur\.sm collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://forum\.ansible\.com/t/2854](https\://forum\.ansible\.com/t/2854)\)\. +* The netapp\.storagegrid collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://forum\.ansible\.com/t/2811](https\://forum\.ansible\.com/t/2811)\)\. + + +#### Ansible\-core + +* Old style vars plugins which use the entrypoints get\_host\_vars or get\_group\_vars are deprecated\. The plugin should be updated to inherit from BaseVarsPlugin and define a get\_vars method as the entrypoint\. +* The \'required\' parameter in \'ansible\.module\_utils\.common\.process\.get\_bin\_path\' API is deprecated \([https\://github\.com/ansible/ansible/issues/82464](https\://github\.com/ansible/ansible/issues/82464)\)\. +* module\_utils \- importing the following convenience helpers from ansible\.module\_utils\.basic has been deprecated\: get\_exception\, literal\_eval\, \_literal\_eval\, datetime\, signal\, types\, chain\, repeat\, PY2\, PY3\, b\, binary\_type\, integer\_types\, iteritems\, string\_types\, test\_type\, map and shlex\_quote\. +* ansible\-doc \- role entrypoint attributes are deprecated and eventually will no longer be shown in ansible\-doc from ansible\-core 2\.20 on \([https\://github\.com/ansible/ansible/issues/82639](https\://github\.com/ansible/ansible/issues/82639)\, [https\://github\.com/ansible/ansible/pull/82678](https\://github\.com/ansible/ansible/pull/82678)\)\. +* paramiko connection plugin\, configuration items in the global scope are being deprecated and will be removed in favor or the existing same options in the plugin itself\. Users should not need to change anything \(how to configure them are the same\) but plugin authors using the global constants should move to using the plugin\'s get\_option\(\)\. + + +#### amazon\.aws + +* 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](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](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](https\://github\.com/ansible\-collections/amazon\.aws/pull/2040)\)\. +* iam\_role\_info \- in a release after 2026\-05\-01 paths must begin and end with / \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. +* 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](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](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](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](https\://github\.com/ansible\-collections/amazon\.aws/pull/2058)\)\. + + +#### community\.aws + +* 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](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](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](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](https\://github\.com/ansible\-collections/community\.aws/pull/1716)\)\. + + +#### community\.crypto + +* acme documentation fragment \- the default community\.crypto\.acme\[\.documentation\] docs fragment is deprecated and will be removed from community\.crypto 3\.0\.0\. Replace it with both the new community\.crypto\.acme\.basic and community\.crypto\.acme\.account fragments \([https\://github\.com/ansible\-collections/community\.crypto/pull/735](https\://github\.com/ansible\-collections/community\.crypto/pull/735)\)\. +* acme\.backends module utils \- from community\.crypto on\, all implementations of CryptoBackend must override get\_ordered\_csr\_identifiers\(\)\. The current default implementation\, which simply sorts the result of get\_csr\_identifiers\(\)\, will then be removed \([https\://github\.com/ansible\-collections/community\.crypto/pull/725](https\://github\.com/ansible\-collections/community\.crypto/pull/725)\)\. +* acme\.backends module utils \- the get\_cert\_information\(\) method for a ACME crypto backend must be implemented from community\.crypto 3\.0\.0 on \([https\://github\.com/ansible\-collections/community\.crypto/pull/736](https\://github\.com/ansible\-collections/community\.crypto/pull/736)\)\. +* crypto\.module\_backends\.common module utils \- the crypto\.module\_backends\.common module utils is deprecated and will be removed from community\.crypto 3\.0\.0\. Use the improved argspec module util instead \([https\://github\.com/ansible\-collections/community\.crypto/pull/749](https\://github\.com/ansible\-collections/community\.crypto/pull/749)\)\. +* openssl\_csr\_pipe\, openssl\_privatekey\_pipe\, x509\_certificate\_pipe \- the current behavior of check mode is deprecated and will change in community\.crypto 3\.0\.0\. The current behavior is similar to the modules without \_pipe\: if the object needs to be \(re\-\)generated\, only the changed status is set\, but the object is not updated\. From community\.crypto 3\.0\.0 on\, the modules will ignore check mode and always act as if check mode is not active\. This behavior can already achieved now by adding check\_mode\: false to the task\. If you think this breaks your use\-case of this module\, please [create an issue in the community\.crypto repository](https\://github\.com/ansible\-collections/community\.crypto/issues/new/choose) \([https\://github\.com/ansible\-collections/community\.crypto/issues/712](https\://github\.com/ansible\-collections/community\.crypto/issues/712)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/714](https\://github\.com/ansible\-collections/community\.crypto/pull/714)\)\. + + +#### community\.dns + +* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the filters option has been renamed to simple\_filters\. The old name will stop working in community\.hrobot 2\.0\.0 \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\. + + +#### community\.docker + +* docker\_compose \- the Docker Compose v1 module is deprecated and will be removed from community\.docker 4\.0\.0\. Please migrate to the community\.docker\.docker\_compose\_v2 module\, which works with Docker Compose v2 \([https\://github\.com/ansible\-collections/community\.docker/issues/823](https\://github\.com/ansible\-collections/community\.docker/issues/823)\, [https\://github\.com/ansible\-collections/community\.docker/pull/833](https\://github\.com/ansible\-collections/community\.docker/pull/833)\)\. +* docker\_container \- the default ignore for the image\_name\_mismatch parameter has been deprecated and will switch to recreate in community\.docker 4\.0\.0\. A deprecation warning will be printed in situations where the default value is used and where a behavior would change once the default changes \([https\://github\.com/ansible\-collections/community\.docker/pull/703](https\://github\.com/ansible\-collections/community\.docker/pull/703)\)\. +* various modules and plugins \- the ssl\_version option has been deprecated and will be removed from community\.docker 4\.0\.0\. It has already been removed from Docker SDK for Python 7\.0\.0\, and was only necessary in the past to work around SSL/TLS issues \([https\://github\.com/ansible\-collections/community\.docker/pull/853](https\://github\.com/ansible\-collections/community\.docker/pull/853)\)\. + + +#### community\.general + +* MH DependencyCtxMgr module\_utils \- deprecate module\_utils\.mh\.mixin\.deps\.DependencyCtxMgr in favour of module\_utils\.deps \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\. +* ModuleHelper module\_utils \- deprecate plugins\.module\_utils\.module\_helper\.AnsibleModule \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\. +* ModuleHelper module\_utils \- deprecate plugins\.module\_utils\.module\_helper\.DependencyCtxMgr \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\. +* ModuleHelper module\_utils \- deprecate plugins\.module\_utils\.module\_helper\.StateMixin \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\. +* ModuleHelper module\_utils \- deprecate plugins\.module\_utils\.module\_helper\.VarDict\, \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\. +* ModuleHelper module\_utils \- deprecate plugins\.module\_utils\.module\_helper\.VarMeta \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\. +* ModuleHelper module\_utils \- deprecate plugins\.module\_utils\.module\_helper\.VarsMixin \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\. +* ModuleHelper module\_utils \- deprecate use of VarsMixin in favor of using the VardDict module\_utils \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. +* ModuleHelper vars module\_utils \- bump deprecation of VarMeta\, VarDict and VarsMixin to version 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\. +* apt\_rpm \- the behavior of state\=present and state\=installed is deprecated and will change in community\.general 11\.0\.0\. Right now the module will upgrade a package to the latest version if one of these two states is used\. You should explicitly use state\=latest if you want this behavior\, and switch to state\=present\_not\_latest if you do not want to upgrade the package if it is already installed\. In community\.general 11\.0\.0 the behavior of state\=present and state\=installed will change to that of state\=present\_not\_latest \([https\://github\.com/ansible\-collections/community\.general/issues/8217](https\://github\.com/ansible\-collections/community\.general/issues/8217)\, [https\://github\.com/ansible\-collections/community\.general/pull/8285](https\://github\.com/ansible\-collections/community\.general/pull/8285)\)\. +* consul\_acl \- the module has been deprecated and will be removed in community\.general 10\.0\.0\. consul\_token and consul\_policy can be used instead \([https\://github\.com/ansible\-collections/community\.general/pull/7901](https\://github\.com/ansible\-collections/community\.general/pull/7901)\)\. +* django\_manage \- the ack\_venv\_creation\_deprecation option has no more effect and will be removed from community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* gitlab modules \- the basic auth method on GitLab API have been deprecated and will be removed in community\.general 10\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/8383](https\://github\.com/ansible\-collections/community\.general/pull/8383)\)\. +* hipchat callback plugin \- the hipchat service has been discontinued and the self\-hosted variant has been End of Life since 2020\. The callback plugin is therefore deprecated and will be removed from community\.general 10\.0\.0 if nobody provides compelling reasons to still keep it \([https\://github\.com/ansible\-collections/community\.general/issues/8184](https\://github\.com/ansible\-collections/community\.general/issues/8184)\, [https\://github\.com/ansible\-collections/community\.general/pull/8189](https\://github\.com/ansible\-collections/community\.general/pull/8189)\)\. +* irc \- the defaults false for use\_tls and validate\_certs have been deprecated and will change to true in community\.general 10\.0\.0 to improve security\. You can already improve security now by explicitly setting them to true\. Specifying values now disables the deprecation warning \([https\://github\.com/ansible\-collections/community\.general/pull/7578](https\://github\.com/ansible\-collections/community\.general/pull/7578)\)\. + + +#### community\.hrobot + +* robot inventory plugin \- the filters option has been renamed to simple\_filters\. The old name will stop working in community\.hrobot 2\.0\.0 \([https\://github\.com/ansible\-collections/community\.hrobot/pull/94](https\://github\.com/ansible\-collections/community\.hrobot/pull/94)\)\. + + +#### community\.okd + +* openshift \- the openshift inventory plugin has been deprecated and will be removed in release 4\.0\.0 \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/31](https\://github\.com/ansible\-collections/kubernetes\.core/issues/31)\)\. + + +#### community\.vmware + +* vmware\_guest\_tools\_info \- vm\_tools\_install\_status will be removed from next major version \(5\.0\.0\) of the collection since the API call that provides this information has been deprecated by VMware\. Use vm\_tools\_running\_status / vm\_tools\_version\_status instead \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\. + + +#### dellemc\.openmanage + +* The dellemc\_idrac\_storage\_volume module is deprecated and replaced with idrac\_storage\_volume\. + + +#### kubernetes\.core + +* k8s \- the k8s inventory plugin has been deprecated and will be removed in release 4\.0\.0 \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/31](https\://github\.com/ansible\-collections/kubernetes\.core/issues/31)\)\. + + +### Removed Features \(previously deprecated\) + +* The gluster\.gluster collection was considered unmaintained and removed from Ansible 10 \([https\://github\.com/ansible\-community/community\-topics/issues/225](https\://github\.com/ansible\-community/community\-topics/issues/225)\)\. Users can still install this collection with ansible\-galaxy collection install gluster\.gluster\. +* The hpe\.nimble collection was considered unmaintained and removed from Ansible 10 \([https\://github\.com/ansible\-community/community\-topics/issues/254](https\://github\.com/ansible\-community/community\-topics/issues/254)\)\. Users can still install this collection with ansible\-galaxy collection install hpe\.nimble\. +* The netapp\.aws collection was considered unmaintained and removed from Ansible 10 \([https\://github\.com/ansible\-community/community\-topics/issues/223](https\://github\.com/ansible\-community/community\-topics/issues/223)\)\. Users can still install this collection with ansible\-galaxy collection install netapp\.aws\. +* The netapp\.azure collection was considered unmaintained and removed from Ansible 10 \([https\://github\.com/ansible\-community/community\-topics/issues/234](https\://github\.com/ansible\-community/community\-topics/issues/234)\)\. Users can still install this collection with ansible\-galaxy collection install netapp\.azure\. +* The netapp\.elementsw collection was considered unmaintained and removed from Ansible 10 \([https\://github\.com/ansible\-community/community\-topics/issues/235](https\://github\.com/ansible\-community/community\-topics/issues/235)\)\. Users can still install this collection with ansible\-galaxy collection install netapp\.elementsw\. +* The netapp\.um\_info collection was considered unmaintained and removed from Ansible 10 \([https\://github\.com/ansible\-community/community\-topics/issues/244](https\://github\.com/ansible\-community/community\-topics/issues/244)\)\. Users can still install this collection with ansible\-galaxy collection install netapp\.um\_info\. +* The deprecated community\.azure collection has been removed\. There is a successor collection azure\.azcollection in the community package which should cover the same functionality\. +* The deprecated community\.sap collection has been removed from Ansible 10 \([https\://github\.com/ansible\-community/community\-topics/issues/247](https\://github\.com/ansible\-community/community\-topics/issues/247)\)\. There is a successor collection community\.sap\_libs in the community package which should cover the same functionality\. +* The deprecated purestorage\.fusion collection has been removed \([https\://forum\.ansible\.com/t/3712](https\://forum\.ansible\.com/t/3712)\)\. + + +#### Ansible\-core + +* Remove deprecated APIs from ansible\-docs \([https\://github\.com/ansible/ansible/issues/81716](https\://github\.com/ansible/ansible/issues/81716)\)\. +* Remove deprecated JINJA2\_NATIVE\_WARNING environment variable \([https\://github\.com/ansible/ansible/issues/81714](https\://github\.com/ansible/ansible/issues/81714)\) +* Remove deprecated scp\_if\_ssh from ssh connection plugin \([https\://github\.com/ansible/ansible/issues/81715](https\://github\.com/ansible/ansible/issues/81715)\)\. +* Remove deprecated crypt support from ansible\.utils\.encrypt \([https\://github\.com/ansible/ansible/issues/81717](https\://github\.com/ansible/ansible/issues/81717)\) +* Removed Python 2\.7 and Python 3\.6 as a supported remote version\. Python 3\.7\+ is now required for target execution\. +* With the removal of Python 2 support\, the yum module and yum action plugin are removed and redirected to dnf\. + + +#### amazon\.aws + +* 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](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](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](https\://github\.com/ansible\-collections/amazon\.aws/pull/2052)\)\. + + +#### arista\.eos + +* 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\. + + +#### cisco\.ios + +* Deprecated ios\_ntp module in favor of ios\_ntp\_global\. +* Removed previously deprecated ios\_bgp module in favor of ios\_bgp\_global and ios\_bgp\_address\_family\. + + +#### cisco\.iosxr + +* Remove deprecated iosxr\_logging module which is replaced with iosxr\_logging\_global resource module\. + + +#### cisco\.nxos + +* 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\. + + +#### community\.dns + +* The collection no longer supports Ansible\, ansible\-base\, and ansible\-core releases that are currently End of Life at the time of the 3\.0\.0 release\. This means that Ansible 2\.9\, ansible\-base 2\.10\, ansible\-core 2\.11\, ansible\-core 2\.12\, ansible\-core 2\.13\, and ansible\-core 2\.14 are no longer supported\. The collection might still work with these versions\, but it can stop working at any moment without advance notice\, and this will not be considered a bug \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* hetzner\_dns\_record\_set\, hetzner\_dns\_record \- the deprecated alias name of the prefix option was removed \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* hosttech\_dns\_records \- the redirect to the hosttech\_dns\_record\_sets module has been removed \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. + + +#### community\.general + +* The deprecated redirects for internal module names have been removed\. These internal redirects were extra\-long FQCNs like community\.general\.packaging\.os\.apt\_rpm that redirect to the short FQCN community\.general\.apt\_rpm\. They were originally needed to implement flatmapping\; as various tooling started to recommend users to use the long names flatmapping was removed from the collection and redirects were added for users who already followed these incorrect recommendations \([https\://github\.com/ansible\-collections/community\.general/pull/7835](https\://github\.com/ansible\-collections/community\.general/pull/7835)\)\. +* ansible\_galaxy\_install \- the ack\_ansible29 and ack\_min\_ansiblecore211 options have been removed\. They no longer had any effect \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* cloudflare\_dns \- remove support for SPF records\. These are no longer supported by CloudFlare \([https\://github\.com/ansible\-collections/community\.general/pull/7782](https\://github\.com/ansible\-collections/community\.general/pull/7782)\)\. +* django\_manage \- support for the command values cleanup\, syncdb\, and validate were removed\. Use clearsessions\, migrate\, and check instead\, respectively \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* flowdock \- this module relied on HTTPS APIs that do not exist anymore and was thus removed \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* mh\.mixins\.deps module utils \- the DependencyMixin has been removed\. Use the deps module utils instead \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* proxmox \- the proxmox\_default\_behavior option has been removed \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* rax\* modules\, rax module utils\, rax docs fragment \- the Rackspace modules relied on the deprecated package pyrax and were thus removed \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* redhat module utils \- the classes Rhsm\, RhsmPool\, and RhsmPools have been removed \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* redhat\_subscription \- the alias autosubscribe of the auto\_attach option was removed \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* stackdriver \- this module relied on HTTPS APIs that do not exist anymore and was thus removed \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. +* webfaction\_\* modules \- these modules relied on HTTPS APIs that do not exist anymore and were thus removed \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\. + + +#### community\.grafana + +* removed deprecated message argument in grafana\_dashboard + + +#### community\.hrobot + +* The collection no longer supports Ansible\, ansible\-base\, and ansible\-core releases that are currently End of Life at the time of the 2\.0\.0 release\. This means that Ansible 2\.9\, ansible\-base 2\.10\, ansible\-core 2\.11\, ansible\-core 2\.12\, ansible\-core 2\.13\, and ansible\-core 2\.14 are no longer supported\. The collection might still work with these versions\, but it can stop working at any moment without advance notice\, and this will not be considered a bug \([https\://github\.com/ansible\-collections/community\.hrobot/pull/101](https\://github\.com/ansible\-collections/community\.hrobot/pull/101)\)\. + + +#### junipernetworks\.junos + +* Remove deprected junos\_logging module which is replaced by junos\_logging\_global resource module\. + + +### Security Fixes + + +#### Ansible\-core + +* ANSIBLE\_NO\_LOG \- Address issue where ANSIBLE\_NO\_LOG was ignored \(CVE\-2024\-0690\) +* ansible\-galaxy \- Prevent roles from using symlinks to overwrite files outside of the installation directory \(CVE\-2023\-5115\) +* templating \- Address issues where internal templating can cause unsafe variables to lose their unsafe designation \(CVE\-2023\-5764\) + + +#### community\.dns + +* hosttech\_dns\_records and hetzner\_dns\_records inventory plugins \- make sure all data received from the remote servers is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.dns/pull/189](https\://github\.com/ansible\-collections/community\.dns/pull/189)\)\. + + +#### community\.docker + +* docker\_containers\, docker\_machine\, and docker\_swarm inventory plugins \- make sure all data received from the Docker daemon / Docker machine is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.docker/pull/815](https\://github\.com/ansible\-collections/community\.docker/pull/815)\)\. + + +#### community\.general + +* cobbler\, gitlab\_runners\, icinga2\, linode\, lxd\, nmap\, online\, opennebula\, proxmox\, scaleway\, stackpath\_compute\, virtualbox\, and xen\_orchestra inventory plugin \- make sure all data received from the remote servers is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.general/pull/8098](https\://github\.com/ansible\-collections/community\.general/pull/8098)\)\. +* keycloak\_identity\_provider \- the client secret was not correctly sanitized by the module\. The return values proposed\, existing\, and end\_state\, as well as the diff\, did contain the client secret unmasked \([https\://github\.com/ansible\-collections/community\.general/pull/8355](https\://github\.com/ansible\-collections/community\.general/pull/8355)\)\. + + +#### community\.hrobot + +* robot inventory plugin \- make sure all data received from the Hetzner robot service server is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.hrobot/pull/99](https\://github\.com/ansible\-collections/community\.hrobot/pull/99)\)\. + + +### Bugfixes + + +#### Ansible\-core + +* Add a version ceiling constraint for pypsrp to avoid potential breaking changes in the 1\.0\.0 release\. +* All core lookups now use set\_option\(s\) even when doing their own custom parsing\. This ensures that the options are always the proper type\. +* Allow for searching handler subdir for included task via include\_role \([https\://github\.com/ansible/ansible/issues/81722](https\://github\.com/ansible/ansible/issues/81722)\) +* AnsibleModule\.atomic\_move \- fix preserving extended ACLs of the destination when it exists \([https\://github\.com/ansible/ansible/issues/72929](https\://github\.com/ansible/ansible/issues/72929)\)\. +* Cache host\_group\_vars after instantiating it once and limit the amount of repetitive work it needs to do every time it runs\. +* Call PluginLoader\.all\(\) once for vars plugins\, and load vars plugins that run automatically or are enabled specifically by name subsequently\. +* Consolidate systemd detection logic into one place \([https\://github\.com/ansible/ansible/issues/80975](https\://github\.com/ansible/ansible/issues/80975)\)\. +* Consolidated the list of internal static vars\, centralized them as constant and completed from some missing entries\. +* Do not print undefined error message twice \([https\://github\.com/ansible/ansible/issues/78703](https\://github\.com/ansible/ansible/issues/78703)\)\. +* Enable file cache for vaulted files during vars lookup to fix a strong performance penalty in huge and complex playbboks\. +* Fix NEVRA parsing of package names that include digit\(s\) in them \([https\://github\.com/ansible/ansible/issues/76463](https\://github\.com/ansible/ansible/issues/76463)\, [https\://github\.com/ansible/ansible/issues/81018](https\://github\.com/ansible/ansible/issues/81018)\) +* Fix force\_handlers not working with any\_errors\_fatal \([https\://github\.com/ansible/ansible/issues/36308](https\://github\.com/ansible/ansible/issues/36308)\) +* Fix run\_once being incorrectly interpreted on handlers \([https\://github\.com/ansible/ansible/issues/81666](https\://github\.com/ansible/ansible/issues/81666)\) +* Fix an issue when setting a plugin name from an unsafe source resulted in ValueError\: unmarshallable object \([https\://github\.com/ansible/ansible/issues/82708](https\://github\.com/ansible/ansible/issues/82708)\) +* Fix check for missing \_sub\_plugin attribute in older connection plugins \([https\://github\.com/ansible/ansible/pull/82954](https\://github\.com/ansible/ansible/pull/82954)\) +* Fix condition for unquoting configuration strings from ini files \([https\://github\.com/ansible/ansible/issues/82387](https\://github\.com/ansible/ansible/issues/82387)\)\. +* Fix for when any\_errors\_fatal was ignored if error occurred in a block with always \([https\://github\.com/ansible/ansible/issues/31543](https\://github\.com/ansible/ansible/issues/31543)\) +* Fix handlers not being executed in lockstep using the linear strategy in some cases \([https\://github\.com/ansible/ansible/issues/82307](https\://github\.com/ansible/ansible/issues/82307)\) +* Fix handling missing urls in ansible\.module\_utils\.urls\.fetch\_file for Python 3\. +* Fix issue where an include\_tasks handler in a role was not able to locate a file in tasks/ when tasks\_from was used as a role entry point and main\.yml was not present \([https\://github\.com/ansible/ansible/issues/82241](https\://github\.com/ansible/ansible/issues/82241)\) +* Fix issues when tasks withing nested blocks wouldn\'t run when force\_handlers is set \([https\://github\.com/ansible/ansible/issues/81533](https\://github\.com/ansible/ansible/issues/81533)\) +* Fix loading vars\_plugins in roles \([https\://github\.com/ansible/ansible/issues/82239](https\://github\.com/ansible/ansible/issues/82239)\)\. +* Fix notifying role handlers by listen keyword topics with the \"role\_name \: \" prefix \([https\://github\.com/ansible/ansible/issues/82849](https\://github\.com/ansible/ansible/issues/82849)\)\. +* Fix setting proper locale for git executable when running on non english systems\, ensuring git output can always be parsed\. +* Fix tasks in always section not being executed for nested blocks with any\_errors\_fatal \([https\://github\.com/ansible/ansible/issues/73246](https\://github\.com/ansible/ansible/issues/73246)\) +* Fixes permission for cache json file from 600 to 644 \([https\://github\.com/ansible/ansible/issues/82683](https\://github\.com/ansible/ansible/issues/82683)\)\. +* Give the tombstone error for include pre\-fork like other tombstoned action/module plugins\. +* Harden python templates for respawn and ansiballz around str literal quoting +* Include the task location when a module or action plugin is deprecated \([https\://github\.com/ansible/ansible/issues/82450](https\://github\.com/ansible/ansible/issues/82450)\)\. +* Interpreter discovery \- Add Amzn to OS\_FAMILY\_MAP for correct family fallback for interpreter discovery \([https\://github\.com/ansible/ansible/issues/80882](https\://github\.com/ansible/ansible/issues/80882)\)\. +* Mirror the behavior of dnf on the command line when handling NEVRAs with omitted epoch \([https\://github\.com/ansible/ansible/issues/71808](https\://github\.com/ansible/ansible/issues/71808)\) +* Plugin loader does not dedupe nor cache filter/test plugins by file basename\, but full path name\. +* Properly template tags in parent blocks \([https\://github\.com/ansible/ansible/issues/81053](https\://github\.com/ansible/ansible/issues/81053)\) +* Provide additional information about the alternative plugin in the deprecation message \([https\://github\.com/ansible/ansible/issues/80561](https\://github\.com/ansible/ansible/issues/80561)\)\. +* Remove the galaxy\_info field platforms from the role templates \([https\://github\.com/ansible/ansible/issues/82453](https\://github\.com/ansible/ansible/issues/82453)\)\. +* Restoring the ability of filters/tests can have same file base name but different tests/filters defined inside\. +* Reword the error message when the module fails to parse parameters in JSON format \([https\://github\.com/ansible/ansible/issues/81188](https\://github\.com/ansible/ansible/issues/81188)\)\. +* Reword warning if the reserved keyword \_ansible\_ used as a module parameter \([https\://github\.com/ansible/ansible/issues/82514](https\://github\.com/ansible/ansible/issues/82514)\)\. +* Run all handlers with the same listen topic\, even when notified from another handler \([https\://github\.com/ansible/ansible/issues/82363](https\://github\.com/ansible/ansible/issues/82363)\)\. +* Slight optimization to hostvars \(instantiate template only once per host\, vs per call to var\)\. +* Stopped misleadingly advertising async mode support in the reboot module \([https\://github\.com/ansible/ansible/issues/71517](https\://github\.com/ansible/ansible/issues/71517)\)\. +* ansible\-galaxy role import \- fix using the role\_name in a standalone role\'s galaxy\_info metadata by disabling automatic removal of the ansible\-role\- prefix\. This matches the behavior of the Galaxy UI which also no longer implicitly removes the ansible\-role\- prefix\. Use the \-\-role\-name option or add a role\_name to the galaxy\_info dictionary in the role\'s meta/main\.yml to use an alternate role name\. +* ansible\-test sanity \-\-test runtime\-metadata \- add action\_plugin as a valid field for modules in the schema \([https\://github\.com/ansible/ansible/pull/82562](https\://github\.com/ansible/ansible/pull/82562)\)\. +* ansible\.module\_utils\.service \- ensure binary data transmission in daemonize\(\) +* any\_errors\_fatal should fail all hosts and rescue all of them when a rescue section is specified \([https\://github\.com/ansible/ansible/issues/80981](https\://github\.com/ansible/ansible/issues/80981)\) +* include\_role \- properly execute v2\_playbook\_on\_include and v2\_runner\_on\_failed callbacks as well as increase ok and failed stats in the play recap\, when appropriate \([https\://github\.com/ansible/ansible/issues/77336](https\://github\.com/ansible/ansible/issues/77336)\) +* allow\_duplicates \- fix evaluating if the current role allows duplicates instead of using the initial value from the duplicate\'s cached role\. +* ansible\-config init will now dedupe ini entries from plugins\. +* ansible\-config will now properly template defaults before dumping them\. +* ansible\-doc \- fixed \"inicates\" typo in output +* ansible\-doc \- format top\-level descriptions with multiple paragraphs as multiple paragraphs\, instead of concatenating them \([https\://github\.com/ansible/ansible/pull/83155](https\://github\.com/ansible/ansible/pull/83155)\)\. +* ansible\-galaxy \- Deprecate use of the Galaxy v2 API \([https\://github\.com/ansible/ansible/issues/81781](https\://github\.com/ansible/ansible/issues/81781)\) +* ansible\-galaxy \- Provide a better error message when using a requirements file with an invalid format \- [https\://github\.com/ansible/ansible/issues/81901](https\://github\.com/ansible/ansible/issues/81901) +* ansible\-galaxy \- Resolve issue with the dataclass used for galaxy\.yml manifest caused by using future annotations +* ansible\-galaxy \- ensure path to ansible collection when installing or downloading doesn\'t have a backslash \([https\://github\.com/ansible/ansible/pull/79705](https\://github\.com/ansible/ansible/pull/79705)\)\. +* ansible\-galaxy \- started allowing the use of pre\-releases for collections that do not have any stable versions published\. \([https\://github\.com/ansible/ansible/pull/81606](https\://github\.com/ansible/ansible/pull/81606)\) +* ansible\-galaxy \- started allowing the use of pre\-releases for dependencies on any level of the dependency tree that specifically demand exact pre\-release versions of collections and not version ranges\. \([https\://github\.com/ansible/ansible/pull/81606](https\://github\.com/ansible/ansible/pull/81606)\) +* ansible\-galaxy error on dependency resolution will not error itself due to \'virtual\' collections not having a name/namespace\. +* ansible\-galaxy info \- fix reporting no role found when lookup\_role\_by\_name returns None\. +* ansible\-galaxy role import \- exit with 1 when the import fails \([https\://github\.com/ansible/ansible/issues/82175](https\://github\.com/ansible/ansible/issues/82175)\)\. +* ansible\-galaxy role install \- fix installing roles from Galaxy that have version None \([https\://github\.com/ansible/ansible/issues/81832](https\://github\.com/ansible/ansible/issues/81832)\)\. +* ansible\-galaxy role install \- fix symlinks \([https\://github\.com/ansible/ansible/issues/82702](https\://github\.com/ansible/ansible/issues/82702)\, [https\://github\.com/ansible/ansible/issues/81965](https\://github\.com/ansible/ansible/issues/81965)\)\. +* ansible\-galaxy role install \- normalize tarfile paths and symlinks using ansible\.utils\.path\.unfrackpath and consider them valid as long as the realpath is in the tarfile\'s role directory \([https\://github\.com/ansible/ansible/issues/81965](https\://github\.com/ansible/ansible/issues/81965)\)\. +* ansible\-inventory \- index available\_hosts for major performance boost when dumping large inventories +* ansible\-pull now will expand relative paths for the \-d\|\-\-directory option is now expanded before use\. +* ansible\-pull will now correctly handle become and connection password file options for ansible\-playbook\. +* ansible\-test \- Add a pylint plugin to work around a known issue on Python 3\.12\. +* ansible\-test \- Explicitly supply ControlPath\=none when setting up port forwarding over SSH to address the scenario where the local ssh configuration uses ControlPath for all hosts\, and would prevent ports to be forwarded after the initial connection to the host\. +* ansible\-test \- Fix parsing of cgroup entries which contain a \: in the path \([https\://github\.com/ansible/ansible/issues/81977](https\://github\.com/ansible/ansible/issues/81977)\)\. +* ansible\-test \- Include missing pylint requirements for Python 3\.10\. +* ansible\-test \- Properly detect docker host when using ssh\:// protocol for connecting to the docker daemon\. +* ansible\-test \- The libexpat package is automatically upgraded during remote bootstrapping to maintain compatibility with newer Python packages\. +* ansible\-test \- The validate\-modules sanity test no longer attempts to process files with unrecognized extensions as Python \(resolves [https\://github\.com/ansible/ansible/issues/82604](https\://github\.com/ansible/ansible/issues/82604)\)\. +* ansible\-test \- Update pylint to version 3\.0\.1\. +* ansible\-test ansible\-doc sanity test \- do not remove underscores from plugin names in collections before calling ansible\-doc \([https\://github\.com/ansible/ansible/pull/82574](https\://github\.com/ansible/ansible/pull/82574)\)\. +* ansible\-test validate\-modules sanity test \- do not treat leading underscores for plugin names in collections as an attempted deprecation \([https\://github\.com/ansible/ansible/pull/82575](https\://github\.com/ansible/ansible/pull/82575)\)\. +* ansible\-test — Python 3\.8–3\.12 will use coverage v7\.3\.2\. +* ansible\.builtin\.apt \- calling clean \= true does not properly clean certain cache files such as /var/cache/apt/pkgcache\.bin and /var/cache/apt/pkgcache\.bin \([https\://github\.com/ansible/ansible/issues/82611](https\://github\.com/ansible/ansible/issues/82611)\) +* ansible\.builtin\.uri \- the module was ignoring the force parameter and always requesting a cached copy \(via the If\-Modified\-Since header\) when downloading to an existing local file\. Disable caching when force is true\, as documented \([https\://github\.com/ansible/ansible/issues/82166](https\://github\.com/ansible/ansible/issues/82166)\)\. +* ansible\_managed restored it\'s \'templatability\' by ensuring the possible injection routes are cut off earlier in the process\. +* apt \- honor install\_recommends and dpkg\_options while installing python3\-apt library \([https\://github\.com/ansible/ansible/issues/40608](https\://github\.com/ansible/ansible/issues/40608)\)\. +* apt \- install recommended packages when installing package via deb file \([https\://github\.com/ansible/ansible/issues/29726](https\://github\.com/ansible/ansible/issues/29726)\)\. +* apt\_repository \- do not modify repo files if the file is a symlink \([https\://github\.com/ansible/ansible/issues/49809](https\://github\.com/ansible/ansible/issues/49809)\)\. +* apt\_repository \- update PPA URL to point to https URL \([https\://github\.com/ansible/ansible/issues/82463](https\://github\.com/ansible/ansible/issues/82463)\)\. +* assemble \- fixed missing parameter \'content\' in \_get\_diff\_data API \([https\://github\.com/ansible/ansible/issues/82359](https\://github\.com/ansible/ansible/issues/82359)\)\. +* async \- Fix bug that stopped running async task in \-\-check when check\_mode\: False was set as a task attribute \- [https\://github\.com/ansible/ansible/issues/82811](https\://github\.com/ansible/ansible/issues/82811) +* blockinfile \- when create\=true is used with a filename without path\, the module crashed \([https\://github\.com/ansible/ansible/pull/81638](https\://github\.com/ansible/ansible/pull/81638)\)\. +* check if there are attributes to set before attempting to set them \([https\://github\.com/ansible/ansible/issues/76727](https\://github\.com/ansible/ansible/issues/76727)\) +* copy action now also generates temprary files as hidden \(\'\.\' prefixed\) to avoid accidental pickup by running services that glob by extension\. +* copy action now ensures that tempfiles use the same suffix as destination\, to allow for validate to work with utilities that check extensions\. +* deb822\_repository \- handle idempotency if the order of parameters is changed \([https\://github\.com/ansible/ansible/issues/82454](https\://github\.com/ansible/ansible/issues/82454)\)\. +* debconf \- allow user to specify a list for value when vtype is multiselect \([https\://github\.com/ansible/ansible/issues/81345](https\://github\.com/ansible/ansible/issues/81345)\)\. +* delegate\_to when set to an empty or undefined variable will now give a proper error\. +* distribution\.py \- Recognize ALP\-Dolomite as part of the SUSE OS family in Ansible\, fixing its previous misidentification \([https\://github\.com/ansible/ansible/pull/82496](https\://github\.com/ansible/ansible/pull/82496)\)\. +* distro \- bump bundled distro version from 1\.6\.0 to 1\.8\.0 \([https\://github\.com/ansible/ansible/issues/81713](https\://github\.com/ansible/ansible/issues/81713)\)\. +* dnf \- fix an issue when cached RPMs were left in the cache directory even when the keepcache setting was unset \([https\://github\.com/ansible/ansible/issues/81954](https\://github\.com/ansible/ansible/issues/81954)\) +* dnf \- fix an issue when installing a package by specifying a file it provides could result in installing a different package providing the same file than the package already installed resulting in resolution failure \([https\://github\.com/ansible/ansible/issues/82461](https\://github\.com/ansible/ansible/issues/82461)\) +* dnf \- properly set gpg check options on enabled repositories according to the disable\_gpg\_check option \([https\://github\.com/ansible/ansible/issues/80110](https\://github\.com/ansible/ansible/issues/80110)\) +* dnf \- properly skip unavailable packages when skip\_broken is enabled \([https\://github\.com/ansible/ansible/issues/80590](https\://github\.com/ansible/ansible/issues/80590)\) +* dnf \- the nobest option only overrides the distribution default when explicitly used\, and is used for all supported operations \([https\://github\.com/ansible/ansible/issues/82616](https\://github\.com/ansible/ansible/issues/82616)\) +* dnf5 \- replace removed API calls +* dnf5 \- respect allow\_downgrade when installing packages directly from rpm files +* dnf5 \- the nobest option only overrides the distribution default when used +* dwim functions for lookups should be better at detectging role context even in abscense of tasks/main\. +* ensure we have logger before we log when we have increased verbosity\. +* expect \- fix argument spec error using timeout\=null \([https\://github\.com/ansible/ansible/issues/80982](https\://github\.com/ansible/ansible/issues/80982)\)\. +* fact gathering on linux now handles thread count by using rounding vs dropping decimals\, it should give slightly more accurate numbers\. +* facts \- add a generic detection for VMware in product name\. +* facts \- detect VMware ESXi 8\.0 virtualization by product name VMware20\,1 +* fetch \- Do not calculate the file size for Windows fetch targets to improve performance\. +* fetch \- add error message when using dest with a trailing slash that becomes a local directory \- [https\://github\.com/ansible/ansible/issues/82878](https\://github\.com/ansible/ansible/issues/82878) +* find \- do not fail on Permission errors \([https\://github\.com/ansible/ansible/issues/82027](https\://github\.com/ansible/ansible/issues/82027)\)\. +* first\_found lookup now always returns a full \(absolute\) and normalized path +* first\_found lookup now always takes into account k\=v options +* flush\_handlers \- properly handle a handler failure in a nested block when force\_handlers is set \([http\://github\.com/ansible/ansible/issues/81532](http\://github\.com/ansible/ansible/issues/81532)\) +* galaxy \- skip verification for unwanted Python compiled bytecode files \([https\://github\.com/ansible/ansible/issues/81628](https\://github\.com/ansible/ansible/issues/81628)\)\. +* handle exception raised while validating with elements\=\'int\' and value is not within choices \([https\://github\.com/ansible/ansible/issues/82776](https\://github\.com/ansible/ansible/issues/82776)\)\. +* include\_tasks \- include ansible\_loop\_var and ansible\_index\_var in a loop \([https\://github\.com/ansible/ansible/issues/82655](https\://github\.com/ansible/ansible/issues/82655)\)\. +* include\_vars \- fix calculating depth relative to the root and ensure all files are included \([https\://github\.com/ansible/ansible/issues/80987](https\://github\.com/ansible/ansible/issues/80987)\)\. +* interpreter\_discovery \- handle AnsibleError exception raised while interpreter discovery \([https\://github\.com/ansible/ansible/issues/78264](https\://github\.com/ansible/ansible/issues/78264)\)\. +* iptables \- add option choices \'src\,src\' and \'dst\,dst\' in match\_set\_flags \([https\://github\.com/ansible/ansible/issues/81281](https\://github\.com/ansible/ansible/issues/81281)\)\. +* iptables \- set jump to DSCP when set\_dscp\_mark or set\_dscp\_mark\_class is set \([https\://github\.com/ansible/ansible/issues/77077](https\://github\.com/ansible/ansible/issues/77077)\)\. +* known\_hosts \- Fix issue with \@cert\-authority entries in known\_hosts incorrectly being removed\. +* module no\_log will no longer affect top level booleans\, for example no\_log\_module\_parameter\=\'a\' will no longer hide changed\=False as a \'no log value\' \(matches \'a\'\)\. +* moved assemble\, raw\, copy\, fetch\, reboot\, script and wait\_for\_connection to query task instead of play\_context ensuring they get the lastest and most correct data\. +* reboot action now handles connections with \'timeout\' vs only \'connection\_timeout\' settings\. +* role params now have higher precedence than host facts again\, matching documentation\, this had unintentionally changed in 2\.15\. +* roles\, code cleanup and performance optimization of dependencies\, now cached\, and public setting is now determined once\, at role instantiation\. +* roles\, the static property is now correctly set\, this will fix issues with public and DEFAULT\_PRIVATE\_ROLE\_VARS controls on exporting vars\. +* set\_option method for plugins to update config now properly passes through type casting and validation\. +* ssh \- add tests for the SSH connection plugin\. +* support url\-encoded credentials in URLs like [http\://x\%40\:\%40\@example\.com](http\://x\%40\:\%40\@example\.com) \([https\://github\.com/ansible/ansible/pull/82552](https\://github\.com/ansible/ansible/pull/82552)\) +* syslog \- Handle ValueError exception raised when sending Null Characters to syslog with Python 3\.12\. +* systemd\_services \- update documentation regarding required\_one\_of and required\_by parameters \([https\://github\.com/ansible/ansible/issues/82914](https\://github\.com/ansible/ansible/issues/82914)\)\. +* template \- Fix error when templating an unsafe string which corresponds to an invalid type in Python \([https\://github\.com/ansible/ansible/issues/82600](https\://github\.com/ansible/ansible/issues/82600)\)\. +* template action will also inherit the behavior from copy \(as it uses it internally\)\. +* templating \- ensure syntax errors originating from a template being compiled into Python code object result in a failure \([https\://github\.com/ansible/ansible/issues/82606](https\://github\.com/ansible/ansible/issues/82606)\) +* unarchive \- add support for 8 character permission strings for zip archives \([https\://github\.com/ansible/ansible/pull/81705](https\://github\.com/ansible/ansible/pull/81705)\)\. +* unarchive \- force unarchive if symlink target changes \([https\://github\.com/ansible/ansible/issues/30420](https\://github\.com/ansible/ansible/issues/30420)\)\. +* unarchive modules now uses zipinfo options without relying on implementation defaults\, making it more compatible with all OS/distributions\. +* unsafe data \- Address an incompatibility when iterating or getting a single index from AnsibleUnsafeBytes +* unsafe data \- Address an incompatibility with AnsibleUnsafeText and AnsibleUnsafeBytes when pickling with protocol\=0 +* unsafe data \- Enable directly using AnsibleUnsafeText with Python pathlib \([https\://github\.com/ansible/ansible/issues/82414](https\://github\.com/ansible/ansible/issues/82414)\) +* uri \- update the documentation for follow\_redirects\. +* uri action plugin now skipped during check mode \(not supported\) instead of even trying to execute the module\, which already skipped\, this does not really change the result\, but returns much faster\. +* vars \- handle exception while combining VarsWithSources and dict \([https\://github\.com/ansible/ansible/issues/81659](https\://github\.com/ansible/ansible/issues/81659)\)\. +* wait\_for should not handle \'non mmapable files\' again\. +* winrm \- Better handle send input failures when communicating with hosts under load +* winrm \- Do not raise another exception during cleanup when a task is timed out \- [https\://github\.com/ansible/ansible/issues/81095](https\://github\.com/ansible/ansible/issues/81095) +* winrm \- does not hang when attempting to get process output when stdin write failed + + +#### amazon\.aws + +* backup\_plan \- Fix idempotency issue when using botocore \>\= 1\.31\.36 \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1952](https\://github\.com/ansible\-collections/amazon\.aws/issues/1952)\)\. +* cloudwatchevent\_rule \- Fix to avoid adding quotes to JSON input for provided input\_template \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1883](https\://github\.com/ansible\-collections/amazon\.aws/pull/1883)\)\. +* cloudwatchlogs\_log\_group\_info \- Implement exponential backoff when making API calls to prevent throttling exceptions \([https\://github\.com/ansible\-collections/amazon\.aws/issues/2011](https\://github\.com/ansible\-collections/amazon\.aws/issues/2011)\)\. +* ec2\_vpc\_subnet \- cleanly handle failure when subnet isn\'t created in time \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1848](https\://github\.com/ansible\-collections/amazon\.aws/pull/1848)\)\. +* 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](https\://github\.com/ansible\-collections/amazon\.aws/pull/2049)\)\. +* iam\_managed\_policy \- fixed an issue where only partial results were returned \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. +* 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](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](https\://github\.com/ansible\-collections/amazon\.aws/issues/2065)\)\. +* 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](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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1859)\)\. +* 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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1781)\)\. +* module\_utils/elbv2 \- Fix issue when creating or modifying Load balancer rule type authenticate\-oidc using ClientSecret parameter and UseExistingClientSecret\=true \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1877](https\://github\.com/ansible\-collections/amazon\.aws/issues/1877)\)\. +* plugin\_utils\.inventory \- Ensure templated options in lookup plugins are converted \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1955](https\://github\.com/ansible\-collections/amazon\.aws/issues/1955)\)\. +* 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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1713)\)\. +* s3\_object \- Fix the issue when copying an object with overriding metadata\. \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1991](https\://github\.com/ansible\-collections/amazon\.aws/issues/1991)\)\. +* s3\_object \- Fix typo that caused false deprecation warning when setting overwrite\=latest \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1847](https\://github\.com/ansible\-collections/amazon\.aws/pull/1847)\)\. +* s3\_object \- fix idempotency issue when copying object uploaded using multipart upload \([https\://github\.com/ansible\-collections/amazon\.aws/issues/2016](https\://github\.com/ansible\-collections/amazon\.aws/issues/2016)\)\. +* 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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1881)\)\. + + +#### ansible\.netcommon + +* 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\. +* 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](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/626)\)\. +* network\_cli \- removed deprecated play\_context\.verbosity property\. + + +#### ansible\.utils + +* Avoid unnecessary use of persistent connection in cli\_parse\, fact\_diff\, update\_fact and validate as this action does not require a connection\. + + +#### ansible\.windows + +* Process\.cs \- Fix up the ProcessCreationFlags\.CreateProtectedProcess typo in the enum name +* setup \- Fix up typo collection \-\> collect when a timeout occurred during a fact subset +* win\_acl \- Fix broken path in case of volume junction +* win\_get\_url \- Fix Tls1\.3 getting removed from the list of security protocols +* win\_powershell \- Remove unecessary using in code causing stray error records in output \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/571](https\://github\.com/ansible\-collections/ansible\.windows/issues/571) +* win\_service\_info \- Warn and not fail if ERROR\_FILE\_NOT\_FOUND when trying to query a service \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/556](https\://github\.com/ansible\-collections/ansible\.windows/issues/556) +* win\_updates \- Fix up typo for Download progress event messages \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/554](https\://github\.com/ansible\-collections/ansible\.windows/issues/554) + + +#### arista\.eos + +* 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](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\. +* correct the reference of string attribute \'reference\_bandwith\'\. +* when static\_routes and vlans are not confirgured then return empty list\. + + +#### check\_point\.mgmt + +* httpapi/checkpoint\.py \- Raise a fatal error if login wasn\'t successful\. + + +#### cisco\.aci + +* Fix auto logout issue in aci connection plugin to keep connection active between tasks +* Fix idempotency for l3out configuration when l3protocol is used in aci\_l3out +* Fix issues with new attributes in aci\_interface\_policy\_leaf\_policy\_group module by adding conditions to include attributes in the payload only when they are specified by the user \(\#578\) +* Fix query in aci\_vmm\_controller + + +#### cisco\.asa + +* Prevents module\_defaults from were being incorrectly applied to the platform action\, instead of the concerned module\. + + +#### cisco\.ios + +* Prevents module\_defaults from were being incorrectly applied to the platform action\, instead of the concerned module\. +* Updated the ios\_ping ping module to support size param\. +* 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\_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 \- make sequence optional for rendering of standard acls\. +* ios\_acls \- take correctly in case where we want to push an ACL from a different type +* 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 \- Explicitly add neighbor address to every parser\. +* ios\_bgp\_global \- Shutdown attributes generates negate command on set as false\. +* ios\_bgp\_global \- description attribute\, evalutated as complex object casted to string\. +* ios\_bgp\_global \- fix template attribute to generate configuration commands\. +* ios\_bgp\_global \- remote\_as not mendatory for neighbors\. +* ios\_interfaces \- description attribute\, evalutated as complex object casted to string\. +* ios\_l3\_interfaces \- remove validation from ipv6 address parameter\. +* ios\_ospfv2 \- Fix improper rendering of admin\_distance attribute\. +* ios\_prefix\_lists \- description attribute\, evalutated as complex object casted to string\. +* ios\_route\_maps \- description attribute\, evalutated as complex object casted to string\. +* ios\_snmp\_server \- fix group and user IPv6 ACL commands\. +* 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\. +* 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\. +* ios\_vlans \- fixes behaviour of shutdown attribute with action states\. +* ios\_vrf \- Update and add missing argspec keys that define the attributes\. +* ios\_vrf \- added MDT related keys + + +#### cisco\.iosxr + +* Fix \'afi\' value in bgp\_templates RM to valid values\. +* Fix issue in gathered state of interfaces and l3\_interfaces RMs\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/452](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/452)\, [https\://github\.com/ansible\-collections/cisco\.iosxr/issues/451](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/451)\) + + +#### cisco\.ise + +* Added missing import re in endpoint module +* 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\. +* Updated to use ciscoisesdk v2\.1\.1 or newer fixing ciscoisesdk problem\. +* ansible\.utils changes to \"\>\=2\.0\.0\,\<5\.0\" in galaxy\.yml dependencies\. +* network\_device\_group \- change parameter name from ndgtype to othername\. +* network\_device\_group\_info \- change parameter name from ndgtype to othername\. + + +#### cisco\.meraki + +* Adding network\_clients\_info and network\_client\_info\. +* Adding platform\_meraki\.rst to docs\. +* Adding product\_types for update request on networks\. +* Adding smartquotes \= False to conf\.py and romoving \' from rst files\. +* Adding build\_ignore property to galaxy file\. +* Adding support to ansible\.utils \>\=3\.0 +* Idempotency bugs fixed in devices\_switch\_ports\. +* Parameter\`organization\_id\` change to organizationId organizations\_claim\. +* Parameter\`organization\_id\` change to organizationId organizations\_clone\. +* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_claim\. +* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_onboarding\_cloud\_monitoring\_export\_events\. +* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_onboarding\_cloud\_monitoring\_prepare\. +* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_release\. +* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_assign\_seats\. +* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_move\. +* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_move\_seats\. +* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_renew\_seats\. +* Parameter\`organization\_id\` change to organizationId organizations\_licensing\_coterm\_licenses\_move\. +* Parameter\`organization\_id\` change to organizationId organizations\_networks\_combine\. +* Parameter\`organization\_id\` change to organizationId organizations\_switch\_devices\_clone\. +* Parameter\`organization\_id\` change to organizationId organizations\_users\. +* Removing logs in meraki\.py\. +* networks\_syslog\_servers is now just an Update action to API\. + + +#### cisco\.mso + +* Fix TypeError for iteration on NoneType in mso\_schema\_template +* Fixed the useg\_subnet logic in mso\_schema\_template\_anp\_epg\_useg\_attribute + + +#### cisco\.nxos + +* Prevents module\_defaults from were being incorrectly applied to the platform action\, instead of the concerned module\. +* nxos\_acls \- Fix parsing of ace entries with range in it\. \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/788](https\://github\.com/ansible\-collections/cisco\.nxos/issues/788)\) +* nxos\_facts \- correct parse JSON output when multiple interfaces have IPv6 address assigned \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/771](https\://github\.com/ansible\-collections/cisco\.nxos/issues/771)\)\. +* nxos\_file\_copy \- correctly set file\_pull\_timeout/persistent\_command\_timeout value\. +* nxos\_interfaces \- Correctly enable L3 interfaces on supported N3K platforms \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/749](https\://github\.com/ansible\-collections/cisco\.nxos/issues/749)\)\. + + +#### community\.aws + +* aws\_ssm \- disable enable\-bracketed\-paste to fix issue with amazon linux 2023 and other OSes \([https\://github\.com/ansible\-collections/community\.aws/issues/1756](https\://github\.com/ansible\-collections/community\.aws/issues/1756)\) +* mq\_broker \- ensure broker is created with tags when passed \([https\://github\.com/ansible\-collections/community\.aws/issues/1832](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](https\://github\.com/ansible\-collections/community\.aws/pull/1910)\)\. +* ssm\(connection\) \- fix bucket region logic when region is us\-east\-1 \([https\://github\.com/ansible\-collections/community\.aws/pull/1908](https\://github\.com/ansible\-collections/community\.aws/pull/1908)\)\. + + +#### community\.ciscosmb + +* issue +* solved issue +* typo in changelog fragment template +* typo in test script + + +#### community\.crypto + +* acme\_\* modules \- also retry requests in case of socket errors\, bad status lines\, and unknown connection errors\; improve error messages in these cases \([https\://github\.com/ansible\-collections/community\.crypto/issues/680](https\://github\.com/ansible\-collections/community\.crypto/issues/680)\)\. +* acme\_\* modules \- directly react on bad return data for account creation/retrieval/updating requests \([https\://github\.com/ansible\-collections/community\.crypto/pull/682](https\://github\.com/ansible\-collections/community\.crypto/pull/682)\)\. +* acme\_\* modules \- fix improved error reporting in case of socket errors\, bad status lines\, and unknown connection errors \([https\://github\.com/ansible\-collections/community\.crypto/pull/684](https\://github\.com/ansible\-collections/community\.crypto/pull/684)\)\. +* acme\_\* modules \- increase number of retries from 5 to 10 to increase stability with unstable ACME endpoints \([https\://github\.com/ansible\-collections/community\.crypto/pull/685](https\://github\.com/ansible\-collections/community\.crypto/pull/685)\)\. +* acme\_\* modules \- make account registration handling more flexible to accept 404 instead of 400 send by DigiCert\'s ACME endpoint when an account does not exist \([https\://github\.com/ansible\-collections/community\.crypto/pull/681](https\://github\.com/ansible\-collections/community\.crypto/pull/681)\)\. +* acme\_certificate \- respect the order of the CNAME and SAN identifiers that are passed on when creating an ACME order \([https\://github\.com/ansible\-collections/community\.crypto/issues/723](https\://github\.com/ansible\-collections/community\.crypto/issues/723)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/725](https\://github\.com/ansible\-collections/community\.crypto/pull/725)\)\. +* crypto\.math module utils \- change return values for quick\_is\_not\_prime\(\) and convert\_int\_to\_bytes\(0\, 0\) for special cases that do not appear when using the collection \([https\://github\.com/ansible\-collections/community\.crypto/pull/733](https\://github\.com/ansible\-collections/community\.crypto/pull/733)\)\. +* ecs\_certificate \- fixed csr option to be empty and allow renewal of a specific certificate according to the Renewal Information specification \([https\://github\.com/ansible\-collections/community\.crypto/pull/740](https\://github\.com/ansible\-collections/community\.crypto/pull/740)\)\. +* luks\_device \- fixed module a bug that prevented using remove\_keyslot with the value 0 \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\. +* luks\_device \- fixed module falsely outputting changed\=false when trying to add a new slot with a key that is already present in another slot\. The module now rejects adding keys that are already present in another slot \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\. +* luks\_device \- fixed testing of LUKS passphrases in when specifying a keyslot for cryptsetup version 2\.0\.3\. The output of this cryptsetup version slightly differs from later versions \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\. +* openssl\_dhparam \- was using an internal function instead of the public API to load DH param files when using the cryptography backend\. The internal function was removed in cryptography 42\.0\.0\. The module now uses the public API\, which has been available since support for DH params was added to cryptography \([https\://github\.com/ansible\-collections/community\.crypto/pull/698](https\://github\.com/ansible\-collections/community\.crypto/pull/698)\)\. +* openssl\_privatekey\_info \- check\_consistency\=true no longer works for RSA keys with cryptography 42\.0\.0\+ \([https\://github\.com/ansible\-collections/community\.crypto/pull/701](https\://github\.com/ansible\-collections/community\.crypto/pull/701)\)\. +* openssl\_privatekey\_info \- check\_consistency\=true now reports a warning if it cannot determine consistency \([https\://github\.com/ansible\-collections/community\.crypto/pull/705](https\://github\.com/ansible\-collections/community\.crypto/pull/705)\)\. +* x509\_certificate \- since community\.crypto 2\.19\.0 the module was no longer idempotent with respect to not\_before and not\_after times\. This is now fixed \([https\://github\.com/ansible\-collections/community\.crypto/issues/753](https\://github\.com/ansible\-collections/community\.crypto/issues/753)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/754](https\://github\.com/ansible\-collections/community\.crypto/pull/754)\)\. +* x509\_crl\, x509\_certificate\, x509\_certificate\_info \- when parsing absolute timestamps which omitted the second count\, the first digit of the minutes was used as a one\-digit minutes count\, and the second digit of the minutes as a one\-digit second count \([https\://github\.com/ansible\-collections/community\.crypto/pull/745](https\://github\.com/ansible\-collections/community\.crypto/pull/745)\)\. + + +#### community\.digitalocean + +* The C\(project\_name\) parameter for many modules was used by alias C\(project\) internally in the codebase\, but to work properly C\(project\_name\) must be used in the code\. Replace self\.module\.params\.get\(\"project\"\) with self\.module\.params\.get\(\"project\_name\"\) \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/326](https\://github\.com/ansible\-collections/community\.digitalocean/issues/326)\)\. +* digital\_ocean\_kubernetes \- module didn\'t return kubeconfig properly\, return documentation was invalid\. Fixed version returns data with the same structure all the time\, also it is aligned with M\(community\.digitalocean\.digital\_ocean\_kubernetes\_info\) documentation return data now\. \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/322](https\://github\.com/ansible\-collections/community\.digitalocean/issues/322)\)\. +* inventory plugin \- restore reading auth token from env variables \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/315](https\://github\.com/ansible\-collections/community\.digitalocean/pull/315)\)\. + + +#### community\.dns + +* DNS record modules\, inventory plugins \- fix the TXT entry encoder to avoid splitting up escape sequences for quotes and backslashes over multiple TXT strings \([https\://github\.com/ansible\-collections/community\.dns/issues/190](https\://github\.com/ansible\-collections/community\.dns/issues/190)\, [https\://github\.com/ansible\-collections/community\.dns/pull/191](https\://github\.com/ansible\-collections/community\.dns/pull/191)\)\. +* Update Public Suffix List\. +* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \([https\://github\.com/ansible\-collections/community\.dns/pull/197](https\://github\.com/ansible\-collections/community\.dns/pull/197)\)\. +* nameserver\_record\_info \- fix crash when more than one record is retrieved \([https\://github\.com/ansible\-collections/community\.dns/pull/172](https\://github\.com/ansible\-collections/community\.dns/pull/172)\)\. +* wait\_for\_txt\, nameserver\_info\, nameserver\_record\_info \- when looking up nameservers for a domain\, do not treat NXDOMAIN as a fatal error \([https\://github\.com/ansible\-collections/community\.dns/pull/177](https\://github\.com/ansible\-collections/community\.dns/pull/177)\)\. + + +#### community\.docker + +* Use unix\:///var/run/docker\.sock instead of the legacy unix\://var/run/docker\.sock as default for docker\_host \([https\://github\.com/ansible\-collections/community\.docker/pull/736](https\://github\.com/ansible\-collections/community\.docker/pull/736)\)\. +* docker and nsenter connection plugins\, docker\_container\_exec module \- avoid using the deprecated ansible\.module\_utils\.compat\.selectors module util with Python 3 \([https\://github\.com/ansible\-collections/community\.docker/issues/870](https\://github\.com/ansible\-collections/community\.docker/issues/870)\, [https\://github\.com/ansible\-collections/community\.docker/pull/871](https\://github\.com/ansible\-collections/community\.docker/pull/871)\)\. +* docker\_compose\_v2 \- do not consider a Waiting event as an action/change \([https\://github\.com/ansible\-collections/community\.docker/pull/804](https\://github\.com/ansible\-collections/community\.docker/pull/804)\)\. +* docker\_compose\_v2 \- do not fail when non\-fatal errors occur\. This can happen when pulling an image fails\, but then the image can be built for another service\. Docker Compose emits an error in that case\, but docker compose up still completes successfully \([https\://github\.com/ansible\-collections/community\.docker/issues/807](https\://github\.com/ansible\-collections/community\.docker/issues/807)\, [https\://github\.com/ansible\-collections/community\.docker/pull/810](https\://github\.com/ansible\-collections/community\.docker/pull/810)\, [https\://github\.com/ansible\-collections/community\.docker/pull/811](https\://github\.com/ansible\-collections/community\.docker/pull/811)\)\. +* docker\_compose\_v2 \- do not treat service\-level pull events as changes to avoid incorrect changed\=true return value of pull\=always \([https\://github\.com/ansible\-collections/community\.docker/issues/802](https\://github\.com/ansible\-collections/community\.docker/issues/802)\, [https\://github\.com/ansible\-collections/community\.docker/pull/803](https\://github\.com/ansible\-collections/community\.docker/pull/803)\)\. +* docker\_compose\_v2 \- properly parse dry\-run build events from stderr \([https\://github\.com/ansible\-collections/community\.docker/issues/778](https\://github\.com/ansible\-collections/community\.docker/issues/778)\, [https\://github\.com/ansible\-collections/community\.docker/pull/779](https\://github\.com/ansible\-collections/community\.docker/pull/779)\)\. +* docker\_compose\_v2\* \- allow project\_src to be a relative path\, by converting it to an absolute path before using it \([https\://github\.com/ansible\-collections/community\.docker/issues/827](https\://github\.com/ansible\-collections/community\.docker/issues/827)\, [https\://github\.com/ansible\-collections/community\.docker/pull/828](https\://github\.com/ansible\-collections/community\.docker/pull/828)\)\. +* docker\_compose\_v2\* modules \- abort with a nice error message instead of crash when the Docker Compose CLI plugin version is dev \([https\://github\.com/ansible\-collections/community\.docker/issues/825](https\://github\.com/ansible\-collections/community\.docker/issues/825)\, [https\://github\.com/ansible\-collections/community\.docker/pull/826](https\://github\.com/ansible\-collections/community\.docker/pull/826)\)\. +* docker\_compose\_v2\* modules \- correctly parse Warning events emitted by Docker Compose \([https\://github\.com/ansible\-collections/community\.docker/issues/807](https\://github\.com/ansible\-collections/community\.docker/issues/807)\, [https\://github\.com/ansible\-collections/community\.docker/pull/811](https\://github\.com/ansible\-collections/community\.docker/pull/811)\)\. +* docker\_compose\_v2\* modules \- parse logfmt warnings emitted by Docker Compose \([https\://github\.com/ansible\-collections/community\.docker/issues/787](https\://github\.com/ansible\-collections/community\.docker/issues/787)\, [https\://github\.com/ansible\-collections/community\.docker/pull/811](https\://github\.com/ansible\-collections/community\.docker/pull/811)\)\. +* docker\_compose\_v2\, docker\_compose\_v2\_pull \- fix parsing of pull messages for Docker Compose 2\.20\.0 \([https\://github\.com/ansible\-collections/community\.docker/issues/785](https\://github\.com/ansible\-collections/community\.docker/issues/785)\, [https\://github\.com/ansible\-collections/community\.docker/pull/786](https\://github\.com/ansible\-collections/community\.docker/pull/786)\)\. +* docker\_compose\_v2\_pull \- fixing idempotence by checking actual pull progress events instead of service\-level pull request when policy\=always\. This stops the module from reporting changed\=true if no actual change happened when pulling\. In check mode\, it has to assume that a change happens though \([https\://github\.com/ansible\-collections/community\.docker/issues/813](https\://github\.com/ansible\-collections/community\.docker/issues/813)\, [https\://github\.com/ansible\-collections/community\.docker/pull/814](https\://github\.com/ansible\-collections/community\.docker/pull/814)\)\. +* docker\_compose\_v2\_pull \- the module was documented as part of the community\.docker\.docker action group\, but was not actually part of it\. That has now been fixed \([https\://github\.com/ansible\-collections/community\.docker/pull/773](https\://github\.com/ansible\-collections/community\.docker/pull/773)\)\. +* docker\_image \- fix archiving idempotency with Docker API 1\.44 or later \([https\://github\.com/ansible\-collections/community\.docker/pull/765](https\://github\.com/ansible\-collections/community\.docker/pull/765)\)\. +* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \([https\://github\.com/ansible\-collections/community\.docker/pull/835](https\://github\.com/ansible\-collections/community\.docker/pull/835)\)\. +* modules and plugins using the Docker SDK for Python \- remove ssl\_version from the parameters passed to Docker SDK for Python 7\.0\.0\+\. Explicitly fail with a nicer error message if it was explicitly set in this case \([https\://github\.com/ansible\-collections/community\.docker/pull/715](https\://github\.com/ansible\-collections/community\.docker/pull/715)\)\. +* modules and plugins using the Docker SDK for Python \- remove tls\_hostname from the parameters passed to Docker SDK for Python 7\.0\.0\+\. Explicitly fail with a nicer error message if it was explicitly set in this case \([https\://github\.com/ansible\-collections/community\.docker/pull/721](https\://github\.com/ansible\-collections/community\.docker/pull/721)\)\. +* vendored Docker SDK for Python \- avoid passing on ssl\_version and tls\_hostname if they were not provided by the user\. Remove dead code\. \([https\://github\.com/ansible\-collections/community\.docker/pull/722](https\://github\.com/ansible\-collections/community\.docker/pull/722)\)\. +* vendored Docker SDK for Python \- include a fix requests 2\.32\.2\+ compatibility \([https\://github\.com/ansible\-collections/community\.docker/issues/860](https\://github\.com/ansible\-collections/community\.docker/issues/860)\, [https\://github\.com/psf/requests/issues/6707](https\://github\.com/psf/requests/issues/6707)\, [https\://github\.com/ansible\-collections/community\.docker/pull/864](https\://github\.com/ansible\-collections/community\.docker/pull/864)\)\. +* vendored Docker SDK for Python \- include a hotfix for requests 2\.32\.0 compatibility \([https\://github\.com/ansible\-collections/community\.docker/issues/860](https\://github\.com/ansible\-collections/community\.docker/issues/860)\, [https\://github\.com/docker/docker\-py/issues/3256](https\://github\.com/docker/docker\-py/issues/3256)\, [https\://github\.com/ansible\-collections/community\.docker/pull/861](https\://github\.com/ansible\-collections/community\.docker/pull/861)\)\. + + +#### community\.general + +* aix\_filesystem \- fix \_validate\_vg not passing VG name to lsvg\_cmd \([https\://github\.com/ansible\-collections/community\.general/issues/8151](https\://github\.com/ansible\-collections/community\.general/issues/8151)\)\. +* aix\_filesystem \- fix issue with empty list items in crfs logic and option order \([https\://github\.com/ansible\-collections/community\.general/pull/8052](https\://github\.com/ansible\-collections/community\.general/pull/8052)\)\. +* apt\-rpm \- the module did not upgrade packages if a newer version exists\. Now the package will be reinstalled if the candidate is newer than the installed version \([https\://github\.com/ansible\-collections/community\.general/issues/7414](https\://github\.com/ansible\-collections/community\.general/issues/7414)\)\. +* apt\_rpm \- when checking whether packages were installed after running apt\-get \-y install \\, only the last package name was checked \([https\://github\.com/ansible\-collections/community\.general/pull/8263](https\://github\.com/ansible\-collections/community\.general/pull/8263)\)\. +* bitwarden\_secrets\_manager lookup plugin \- implements retry with exponential backoff to avoid lookup errors when Bitwardn\'s API rate limiting is encountered \([https\://github\.com/ansible\-collections/community\.general/issues/8230](https\://github\.com/ansible\-collections/community\.general/issues/8230)\, [https\://github\.com/ansible\-collections/community\.general/pull/8238](https\://github\.com/ansible\-collections/community\.general/pull/8238)\)\. +* cargo \- fix idempotency issues when using a custom installation path for packages \(using the \-\-path parameter\)\. The initial installation runs fine\, but subsequent runs use the get\_installed\(\) function which did not check the given installation location\, before running cargo install\. This resulted in a false changed state\. Also the removal of packeges using state\: absent failed\, as the installation check did not use the given parameter \([https\://github\.com/ansible\-collections/community\.general/pull/7970](https\://github\.com/ansible\-collections/community\.general/pull/7970)\)\. +* cloudflare\_dns \- fix Cloudflare lookup of SHFP records \([https\://github\.com/ansible\-collections/community\.general/issues/7652](https\://github\.com/ansible\-collections/community\.general/issues/7652)\)\. +* consul\_token \- fix token creation without accessor\_id \([https\://github\.com/ansible\-collections/community\.general/pull/8091](https\://github\.com/ansible\-collections/community\.general/pull/8091)\)\. +* cpanm \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* django module utils \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* from\_ini filter plugin \- disabling interpolation of ConfigParser to allow converting values with a \% sign \([https\://github\.com/ansible\-collections/community\.general/issues/8183](https\://github\.com/ansible\-collections/community\.general/issues/8183)\, [https\://github\.com/ansible\-collections/community\.general/pull/8185](https\://github\.com/ansible\-collections/community\.general/pull/8185)\)\. +* gconftool2\_info \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* gitlab\_group\_members \- fix gitlab constants call in gitlab\_group\_members module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. +* gitlab\_issue \- fix behavior to search GitLab issue\, using search keyword instead of title \([https\://github\.com/ansible\-collections/community\.general/issues/7846](https\://github\.com/ansible\-collections/community\.general/issues/7846)\)\. +* gitlab\_issue\, gitlab\_label\, gitlab\_milestone \- avoid crash during version comparison when the python\-gitlab Python module is not installed \([https\://github\.com/ansible\-collections/community\.general/pull/8158](https\://github\.com/ansible\-collections/community\.general/pull/8158)\)\. +* gitlab\_project\_members \- fix gitlab constants call in gitlab\_project\_members module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. +* gitlab\_protected\_branches \- fix gitlab constants call in gitlab\_protected\_branches module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. +* gitlab\_runner \- fix pagination when checking for existing runners \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\. +* gitlab\_user \- fix gitlab constants call in gitlab\_user module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. +* haproxy \- fix an issue where HAProxy could get stuck in DRAIN mode when the backend was unreachable \([https\://github\.com/ansible\-collections/community\.general/issues/8092](https\://github\.com/ansible\-collections/community\.general/issues/8092)\)\. +* homebrew \- detect already installed formulae and casks using JSON output from brew info \([https\://github\.com/ansible\-collections/community\.general/issues/864](https\://github\.com/ansible\-collections/community\.general/issues/864)\)\. +* homebrew \- do not fail when brew prints warnings \([https\://github\.com/ansible\-collections/community\.general/pull/8406](https\://github\.com/ansible\-collections/community\.general/pull/8406)\, [https\://github\.com/ansible\-collections/community\.general/issues/7044](https\://github\.com/ansible\-collections/community\.general/issues/7044)\)\. +* homebrew \- error returned from brew command was ignored and tried to parse empty JSON\. Fix now checks for an error and raises it to give accurate error message to users \([https\://github\.com/ansible\-collections/community\.general/issues/8047](https\://github\.com/ansible\-collections/community\.general/issues/8047)\)\. +* hponcfg \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* incus connection plugin \- treats inventory\_hostname as a variable instead of a literal in remote connections \([https\://github\.com/ansible\-collections/community\.general/issues/7874](https\://github\.com/ansible\-collections/community\.general/issues/7874)\)\. +* interface\_files \- also consider address\_family when changing option\=method \([https\://github\.com/ansible\-collections/community\.general/issues/7610](https\://github\.com/ansible\-collections/community\.general/issues/7610)\, [https\://github\.com/ansible\-collections/community\.general/pull/7612](https\://github\.com/ansible\-collections/community\.general/pull/7612)\)\. +* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \(\([https\://github\.com/ansible\-collections/community\.general/issues/8212](https\://github\.com/ansible\-collections/community\.general/issues/8212)\, [https\://github\.com/ansible\-collections/community\.general/pull/8225](https\://github\.com/ansible\-collections/community\.general/pull/8225)\)\. +* ipa \- fix get version regex in IPA module\_utils \([https\://github\.com/ansible\-collections/community\.general/pull/8175](https\://github\.com/ansible\-collections/community\.general/pull/8175)\)\. +* ipa\_hbacrule \- the module uses a string for ipaenabledflag for new FreeIPA versions while the returned value is a boolean \([https\://github\.com/ansible\-collections/community\.general/pull/7880](https\://github\.com/ansible\-collections/community\.general/pull/7880)\)\. +* ipa\_otptoken \- the module expect ipatokendisabled as string but the ipatokendisabled value is returned as a boolean \([https\://github\.com/ansible\-collections/community\.general/pull/7795](https\://github\.com/ansible\-collections/community\.general/pull/7795)\)\. +* ipa\_sudorule \- the module uses a string for ipaenabledflag for new FreeIPA versions while the returned value is a boolean \([https\://github\.com/ansible\-collections/community\.general/pull/7880](https\://github\.com/ansible\-collections/community\.general/pull/7880)\)\. +* iptables\_state \- fix idempotency issues when restoring incomplete iptables dumps \([https\://github\.com/ansible\-collections/community\.general/issues/8029](https\://github\.com/ansible\-collections/community\.general/issues/8029)\)\. +* irc \- replace ssl\.wrap\_socket that was removed from Python 3\.12 with code for creating a proper SSL context \([https\://github\.com/ansible\-collections/community\.general/pull/7542](https\://github\.com/ansible\-collections/community\.general/pull/7542)\)\. +* kernel\_blacklist \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* keycloak\_\* \- fix Keycloak API client to quote / properly \([https\://github\.com/ansible\-collections/community\.general/pull/7641](https\://github\.com/ansible\-collections/community\.general/pull/7641)\)\. +* keycloak\_authz\_permission \- resource payload variable for scope\-based permission was constructed as a string\, when it needs to be a list\, even for a single item \([https\://github\.com/ansible\-collections/community\.general/issues/7151](https\://github\.com/ansible\-collections/community\.general/issues/7151)\)\. +* keycloak\_client \- add sorted defaultClientScopes and optionalClientScopes to normalizations \([https\://github\.com/ansible\-collections/community\.general/pull/8223](https\://github\.com/ansible\-collections/community\.general/pull/8223)\)\. +* keycloak\_client \- fix TypeError when sanitizing the saml\.signing\.private\.key attribute in the module\'s diff or state output\. The sanitize\_cr function expected a dict where in some cases a list might occur \([https\://github\.com/ansible\-collections/community\.general/pull/8403](https\://github\.com/ansible\-collections/community\.general/pull/8403)\)\. +* keycloak\_client \- fixes issue when metadata is provided in desired state when task is in check mode \([https\://github\.com/ansible\-collections/community\.general/issues/1226](https\://github\.com/ansible\-collections/community\.general/issues/1226)\, [https\://github\.com/ansible\-collections/community\.general/pull/7881](https\://github\.com/ansible\-collections/community\.general/pull/7881)\)\. +* keycloak\_identity\_provider \- mappers processing was not idempotent if the mappers configuration list had not been sorted by name \(in ascending order\)\. Fix resolves the issue by sorting mappers in the desired state using the same key which is used for obtaining existing state \([https\://github\.com/ansible\-collections/community\.general/pull/7418](https\://github\.com/ansible\-collections/community\.general/pull/7418)\)\. +* keycloak\_identity\_provider \- it was not possible to reconfigure \(add\, remove\) mappers once they were created initially\. Removal was ignored\, adding new ones resulted in dropping the pre\-existing unmodified mappers\. Fix resolves the issue by supplying correct input to the internal update call \([https\://github\.com/ansible\-collections/community\.general/pull/7418](https\://github\.com/ansible\-collections/community\.general/pull/7418)\)\. +* keycloak\_realm \- add normalizations for enabledEventTypes and supportedLocales \([https\://github\.com/ansible\-collections/community\.general/pull/8224](https\://github\.com/ansible\-collections/community\.general/pull/8224)\)\. +* keycloak\_user \- when force is set\, but user does not exist\, do not try to delete it \([https\://github\.com/ansible\-collections/community\.general/pull/7696](https\://github\.com/ansible\-collections/community\.general/pull/7696)\)\. +* keycloak\_user\_federation \- fix diff of empty krbPrincipalAttribute \([https\://github\.com/ansible\-collections/community\.general/pull/8320](https\://github\.com/ansible\-collections/community\.general/pull/8320)\)\. +* ldap \- previously the order number \(if present\) was expected to follow an equals sign in the DN\. This makes it so the order number string is identified correctly anywhere within the DN \([https\://github\.com/ansible\-collections/community\.general/issues/7646](https\://github\.com/ansible\-collections/community\.general/issues/7646)\)\. +* linode inventory plugin \- add descriptive error message for linode inventory plugin \([https\://github\.com/ansible\-collections/community\.general/pull/8133](https\://github\.com/ansible\-collections/community\.general/pull/8133)\)\. +* locale\_gen \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* log\_entries callback plugin \- replace ssl\.wrap\_socket that was removed from Python 3\.12 with code for creating a proper SSL context \([https\://github\.com/ansible\-collections/community\.general/pull/7542](https\://github\.com/ansible\-collections/community\.general/pull/7542)\)\. +* lvol \- test for output messages in both stdout and stderr \([https\://github\.com/ansible\-collections/community\.general/pull/7601](https\://github\.com/ansible\-collections/community\.general/pull/7601)\, [https\://github\.com/ansible\-collections/community\.general/issues/7182](https\://github\.com/ansible\-collections/community\.general/issues/7182)\)\. +* merge\_variables lookup plugin \- fixing cross host merge\: providing access to foreign hosts variables to the perspective of the host that is performing the merge \([https\://github\.com/ansible\-collections/community\.general/pull/8303](https\://github\.com/ansible\-collections/community\.general/pull/8303)\)\. +* mksysb \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* modprobe \- listing modules files or modprobe files could trigger a FileNotFoundError if /etc/modprobe\.d or /etc/modules\-load\.d did not exist\. Relevant functions now return empty lists if the directories do not exist to avoid crashing the module \([https\://github\.com/ansible\-collections/community\.general/issues/7717](https\://github\.com/ansible\-collections/community\.general/issues/7717)\)\. +* mssql\_script \- make the module work with Python 2 \([https\://github\.com/ansible\-collections/community\.general/issues/7818](https\://github\.com/ansible\-collections/community\.general/issues/7818)\, [https\://github\.com/ansible\-collections/community\.general/pull/7821](https\://github\.com/ansible\-collections/community\.general/pull/7821)\)\. +* nmcli \- fix connection\.slave\-type wired to bond and not with parameter slave\_type in case of connection type wifi \([https\://github\.com/ansible\-collections/community\.general/issues/7389](https\://github\.com/ansible\-collections/community\.general/issues/7389)\)\. +* ocapi\_utils\, oci\_utils\, redfish\_utils module utils \- replace type\(\) calls with isinstance\(\) calls \([https\://github\.com/ansible\-collections/community\.general/pull/7501](https\://github\.com/ansible\-collections/community\.general/pull/7501)\)\. +* onepassword lookup plugin \- failed for fields that were in sections and had uppercase letters in the label/ID\. Field lookups are now case insensitive in all cases \([https\://github\.com/ansible\-collections/community\.general/pull/7919](https\://github\.com/ansible\-collections/community\.general/pull/7919)\)\. +* onepassword lookup plugin \- field and section titles are now case insensitive when using op CLI version two or later\. This matches the behavior of version one \([https\://github\.com/ansible\-collections/community\.general/pull/7564](https\://github\.com/ansible\-collections/community\.general/pull/7564)\)\. +* opentelemetry callback plugin \- close spans always \([https\://github\.com/ansible\-collections/community\.general/pull/8367](https\://github\.com/ansible\-collections/community\.general/pull/8367)\)\. +* opentelemetry callback plugin \- honour the disable\_logs option to avoid storing task results since they are not used regardless \([https\://github\.com/ansible\-collections/community\.general/pull/8373](https\://github\.com/ansible\-collections/community\.general/pull/8373)\)\. +* pacemaker\_cluster \- actually implement check mode\, which the module claims to support\. This means that until now the module also did changes in check mode \([https\://github\.com/ansible\-collections/community\.general/pull/8081](https\://github\.com/ansible\-collections/community\.general/pull/8081)\)\. +* pam\_limits \- when the file does not exist\, do not create it in check mode \([https\://github\.com/ansible\-collections/community\.general/issues/8050](https\://github\.com/ansible\-collections/community\.general/issues/8050)\, [https\://github\.com/ansible\-collections/community\.general/pull/8057](https\://github\.com/ansible\-collections/community\.general/pull/8057)\)\. +* pipx module utils \- change the CLI argument formatter for the pip\_args parameter \([https\://github\.com/ansible\-collections/community\.general/issues/7497](https\://github\.com/ansible\-collections/community\.general/issues/7497)\, [https\://github\.com/ansible\-collections/community\.general/pull/7506](https\://github\.com/ansible\-collections/community\.general/pull/7506)\)\. +* pipx\_info \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* pkgin \- pkgin \(pkgsrc package manager used by SmartOS\) raises erratic exceptions and spurious changed\=true \([https\://github\.com/ansible\-collections/community\.general/pull/7971](https\://github\.com/ansible\-collections/community\.general/pull/7971)\)\. +* proxmox \- fix updating a container config if the setting does not already exist \([https\://github\.com/ansible\-collections/community\.general/pull/7872](https\://github\.com/ansible\-collections/community\.general/pull/7872)\)\. +* proxmox\_kvm \- fixed status check getting from node\-specific API endpoint \([https\://github\.com/ansible\-collections/community\.general/issues/7817](https\://github\.com/ansible\-collections/community\.general/issues/7817)\)\. +* proxmox\_kvm \- running state\=template will first check whether VM is already a template \([https\://github\.com/ansible\-collections/community\.general/pull/7792](https\://github\.com/ansible\-collections/community\.general/pull/7792)\)\. +* proxmox\_pool\_member \- absent state for type VM did not delete VMs from the pools \([https\://github\.com/ansible\-collections/community\.general/pull/7464](https\://github\.com/ansible\-collections/community\.general/pull/7464)\)\. +* puppet \- add option environment\_lang to set the environment language encoding\. Defaults to lang C\. It is recommended to set it to C\.UTF\-8 or en\_US\.UTF\-8 depending on what is available on your system\. \([https\://github\.com/ansible\-collections/community\.general/issues/8000](https\://github\.com/ansible\-collections/community\.general/issues/8000)\) +* redfish\_command \- fix usage of message parsing in SimpleUpdate and MultipartHTTPPushUpdate commands to treat the lack of a MessageId as no message \([https\://github\.com/ansible\-collections/community\.general/issues/7465](https\://github\.com/ansible\-collections/community\.general/issues/7465)\, [https\://github\.com/ansible\-collections/community\.general/pull/7471](https\://github\.com/ansible\-collections/community\.general/pull/7471)\)\. +* redfish\_info \- allow for a GET operation invoked by GetUpdateStatus to allow for an empty response body for cases where a service returns 204 No Content \([https\://github\.com/ansible\-collections/community\.general/issues/8003](https\://github\.com/ansible\-collections/community\.general/issues/8003)\)\. +* redfish\_info \- correct uncaught exception when attempting to retrieve Chassis information \([https\://github\.com/ansible\-collections/community\.general/pull/7952](https\://github\.com/ansible\-collections/community\.general/pull/7952)\)\. +* redhat\_subscription \- use the D\-Bus registration on RHEL 7 only on 7\.4 and + greater\; older versions of RHEL 7 do not have it + \([https\://github\.com/ansible\-collections/community\.general/issues/7622](https\://github\.com/ansible\-collections/community\.general/issues/7622)\, + [https\://github\.com/ansible\-collections/community\.general/pull/7624](https\://github\.com/ansible\-collections/community\.general/pull/7624)\)\. +* riak \- support riak admin sub\-command in newer Riak KV versions beside the legacy riak\-admin main command \([https\://github\.com/ansible\-collections/community\.general/pull/8211](https\://github\.com/ansible\-collections/community\.general/pull/8211)\)\. +* snap \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* snap\_alias \- use new VarDict to prevent deprecation warning \([https\://github\.com/ansible\-collections/community\.general/issues/8410](https\://github\.com/ansible\-collections/community\.general/issues/8410)\, [https\://github\.com/ansible\-collections/community\.general/pull/8411](https\://github\.com/ansible\-collections/community\.general/pull/8411)\)\. +* statusio\_maintenance \- fix error caused by incorrectly formed API data payload\. Was raising \"Failed to create maintenance HTTP Error 400 Bad Request\" caused by bad data type for date/time and deprecated dict keys \([https\://github\.com/ansible\-collections/community\.general/pull/7754](https\://github\.com/ansible\-collections/community\.general/pull/7754)\)\. +* terraform \- fix multiline string handling in complex variables \([https\://github\.com/ansible\-collections/community\.general/pull/7535](https\://github\.com/ansible\-collections/community\.general/pull/7535)\)\. +* to\_ini filter plugin \- disabling interpolation of ConfigParser to allow converting values with a \% sign \([https\://github\.com/ansible\-collections/community\.general/issues/8183](https\://github\.com/ansible\-collections/community\.general/issues/8183)\, [https\://github\.com/ansible\-collections/community\.general/pull/8185](https\://github\.com/ansible\-collections/community\.general/pull/8185)\)\. +* xml \- make module work with lxml 5\.1\.1\, which removed some internals that the module was relying on \([https\://github\.com/ansible\-collections/community\.general/pull/8169](https\://github\.com/ansible\-collections/community\.general/pull/8169)\)\. + + +#### community\.grafana + +* Add grafana\_organiazion\_user to action\_groups\.grafana +* Fixed orgId handling in diff comparison for grafana\_datasource if using org\_name +* Handling of desired default state for first grafana\_datasource +* Ignore type argument for diff comparison if grafana\-postgresq\-datasource alias postgres is used +* Set umask for grafana\_plugin command +* test\: replace deprecated TestCase\.assertEquals to support Python 3\.12 +* undo removed deprecated message argument in grafana\_dashboard + + +#### community\.hrobot + +* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \([https\://github\.com/ansible\-collections/community\.hrobot/pull/102](https\://github\.com/ansible\-collections/community\.hrobot/pull/102)\)\. + + +#### community\.mysql + +* mysql\_info \- the slave\_status filter was returning an empty list on MariaDB with multiple replication channels\. It now returns all channels by running SHOW ALL SLAVES STATUS for MariaDB servers \([https\://github\.com/ansible\-collections/community\.mysql/issues/603](https\://github\.com/ansible\-collections/community\.mysql/issues/603)\)\. + + +#### community\.postgresql + +* postgresql\_db \- restore custom format as file instead of stdin to allow the use of \-\-job flag in target\_opts \([https\://github\.com/ansible\-collections/community\.postgresql/issues/594](https\://github\.com/ansible\-collections/community\.postgresql/issues/594)\)\. +* postgresql\_ext \- Reconnect before upgrade to avoid accidental load of the upgraded extension \([https\://github\.com/ansible\-collections/community\.postgresql/pull/689](https\://github\.com/ansible\-collections/community\.postgresql/pull/689)\)\. +* postgresql\_idx \- consider schema name when checking for index \([https\://github\.com/ansible\-collections/community\.postgresql/issues/692](https\://github\.com/ansible\-collections/community\.postgresql/issues/692)\)\. Index names are only unique within a schema\. This allows using the same index name in multiple schemas\. +* postgresql\_privs \- Enables the ability to revoke functions from user \([https\://github\.com/ansible\-collections/community\.postgresql/issues/687](https\://github\.com/ansible\-collections/community\.postgresql/issues/687)\)\. +* postgresql\_privs \- fix a failure when altering privileges with grant\_option\: true \([https\://github\.com/ansible\-collections/community\.postgresql/issues/668](https\://github\.com/ansible\-collections/community\.postgresql/issues/668)\)\. +* postgresql\_query \- now reports not changed for queries starting with \"SHOW\" \([https\://github\.com/ansible\-collections/community\.postgresql/pull/592](https\://github\.com/ansible\-collections/community\.postgresql/pull/592)\)\. +* postgresql\_user \- module failed when running against an SQL\_ASCII encoded database as the user\'s current password was returned as bytes as opposed to a str\. Fix now checks for this case and decodes the bytes as an ascii encoded string\. \([https\://github\.com/ansible\-collections/community\.postgresql/issues/584](https\://github\.com/ansible\-collections/community\.postgresql/issues/584)\)\. + + +#### community\.routeros + +* facts \- fix date not getting removed for idempotent config export \([https\://github\.com/ansible\-collections/community\.routeros/pull/262](https\://github\.com/ansible\-collections/community\.routeros/pull/262)\)\. + + +#### community\.sap\_libs + +* fixes failures in sanity test for all modules + + +#### community\.vmware + +* Clarify pyVmomi requirement \([https\://github\.com/ansible\-collections/community\.vmware/pull/2071](https\://github\.com/ansible\-collections/community\.vmware/pull/2071)\)\. +* Fix InsecureRequestWarning for modules based on the VmwareRestClient module util when setting validate\_certs to False \([https\://github\.com/ansible\-collections/community\.vmware/pull/1969](https\://github\.com/ansible\-collections/community\.vmware/pull/1969)\)\. +* Use isinstance\(\) instead of type\(\) for a typecheck \([https\://github\.com/ansible\-collections/community\.vmware/pull/2011](https\://github\.com/ansible\-collections/community\.vmware/pull/2011)\)\. +* module\_utils/vmware\.py \- remove ssl\.wrap\_socet\(\) function\. Replaced for code based on ssl\.get\_server\_certificate \([https\://github\.com/ansible\-collections/community\.vmware/issues/1930](https\://github\.com/ansible\-collections/community\.vmware/issues/1930)\)\. +* vmware\_cluster\_dpm \- Handle case where DPM config has not been initialized yet and is None \([https\://github\.com/ansible\-collections/community\.vmware/pull/2057](https\://github\.com/ansible\-collections/community\.vmware/pull/2057)\)\. +* vmware\_dvs\_portgroup \- Fix erroneously reporting a change when port\_binding is static and num\_ports not specified \([https\://github\.com/ansible\-collections/community\.vmware/pull/2053](https\://github\.com/ansible\-collections/community\.vmware/pull/2053)\)\. +* vmware\_guest \- Fix a error while updating the VM by adding a new disk\. While adding a disk to an existing VM\, it leaves it in invalid state\. \([https\://github\.com/ansible\-collections/community\.vmware/pull/2044](https\://github\.com/ansible\-collections/community\.vmware/pull/2044)\)\. +* vmware\_guest \- Fix a missing error message while setting a template parameter with inconsistency guest\_os ID \([https\://github\.com/ansible\-collections/community\.vmware/pull/2036](https\://github\.com/ansible\-collections/community\.vmware/pull/2036)\)\. +* vmware\_guest \- Fix failure of vm reconfiguration with enabled virt\_based\_security \([https\://github\.com/ansible\-collections/community\.vmware/pull/1848](https\://github\.com/ansible\-collections/community\.vmware/pull/1848)\)\. +* vmware\_vm\_info \- Fix an AttributeError when gathering network information \([https\://github\.com/ansible\-collections/community\.vmware/pull/1919](https\://github\.com/ansible\-collections/community\.vmware/pull/1919)\)\. + + +#### community\.windows + +* Remove some code which is no longer valid for dotnet 5\+ +* community\.windows\.win\_psmodule\_info \- exception thrown when host has no Installed Module\. Fix now checks that variable \$installedModules is not null before calling the \.Contains\(\.\.\) function on it\. +* win\_format\, win\_partition \- Add support for Windows failover cluster disks +* win\_psmodule \- Fix up error message with state\=latest +* win\_rabbitmq\_plugin \- Avoid using Invoke\-Expression when running external commands +* win\_rds\_rap \- The module crashed when creating a RAP with Gateway Managed Computer Group \([https\://github\.com/ansible\-collections/community\.windows/issues/184](https\://github\.com/ansible\-collections/community\.windows/issues/184)\)\. +* win\_robocopy \- Fix up cmd return value to include the executable robocopy + + +#### community\.zabbix + +* Avoid to update user\-directory configuration in dry run\. +* api module \- Fixed certificiate errors +* proxy and server roles \- Defaulted location of fping and fping6 based on OS\. +* proxy role \- Removed requirement for mysql group definition\. +* server role \- typo in configuration var StasAllowedIP to StatsAllowedIP +* zabbix\-\{agent\, javagateway\, proxy\, server\, web\} \- support raspberry pi without repository url specification +* zabbix\_agent \- Fixed IPMI authentication algorithm default setting +* zabbix\_agent \- Fixed issue to where scripts can be deployed alongside userparameters +* zabbix\_host \- Don\'t reset IPMI setting when update inventory data of a host +* zabbix\_host \- Finish task with failed if host\_group parameter is empty list +* zabbix\_inventory \- fixed handeling of add\_zabbix\_groups option +* zabbix\_server \- proper indentaion of become in selinux\.yaml +* zabbix\_template \- fix template export when template\'s content has \"error\" word +* zabbix\_web \- Added missing semicolon to nginx vhost template\. +* zabbix\_web role \- fix variable naming issues \(undefined\) to zabbix\_web\_version and zabbix\_web\_apt\_repository +* zabbix\_web role\, Add missing selinux\.yml tasks\. + + +#### containers\.podman + +* Add idempotency for podman\_secret module +* Catch exceptions when no JSON output in podman\_image +* Fail if systemd generation failed and it\'s explicitly set +* Fix example name +* Fix idempotency for podman\_network +* Fix idempotency when using 0\.0\.0\.0 in ports +* Fix multi\-image support for podman\_save +* Fix pod info for non\-existant pods +* Fix volume inspection by name in podman\_volume +* Recreate stopped containers if recreate flag is enabled +* podman\_container \- Add check and fixed for v5 network diff +* podman\_container \- Fix pasta networking idempotency for v5 \(\#728\) +* podman\_container\_exec \- Remove unnecessary quotes in podman\_container\_exec module +* podman\_image\_info \- Fix wrong return data type in podman\_image\_info +* podman\_play \- Fix kube play annotations +* podman\_pod \- Fix broken info of pods in Podman v5 +* podman\_pod \- Fix pod for Podman v5 +* podman\_pod \- Fix podman pod v5 broken info issue + + +#### dellemc\.enterprise\_sonic + +* requirements \- Update requires\_ansible version in meta/runtime\.yml to the oldest supported version \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/321](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/321)\)\. +* sonic\_bgp\_communities \- Fix incorrect \"facts\" handling for parsing of a BGP community list configured with an empty \"members\" list \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/319](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/319)\)\. +* sonic\_bgp\_neighbors \- Fix prefix\-limit issue \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/289](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/289)\)\. +* sonic\_interfaces \- Add warnings when speed and auto\_negotiate is configured at same time \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. +* sonic\_interfaces \- Fix support for standard naming interfaces \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. +* sonic\_interfaces \- Prevent configuring speed in port group interfaces \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. +* sonic\_stp \- Correct the commands list for STP delete state \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/302](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/302)\)\. + + +#### dellemc\.openmanage + +* Added support for RAID creation using NVMe disks\.\([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/635](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/635)\) +* Fixed the issue for ignoring the environment variable NO\_PROXY earlier\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/554](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/554)\) +* For idrac\_certificates module\, the email\_address has been made as an optional parameter\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/582](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/582)\)\. +* Issue is fixed for deploying a new configuration on quick deploy slot when IPv6 is disabled\.\([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/533](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/533)\) +* idrac\_network\_attributes \- Issue\(279049\) \- If unsupported values are provided for the parameter ome\_network\_attributes\, then this module does not provide a correct error message\. +* ome\_device\_network\_services \- Issue\(212681\) \- The module does not provide a proper error message if unsupported values are provided for the following parameters\- port\_number\, community\_name\, max\_sessions\, max\_auth\_retries\, and idle\_timeout\. +* ome\_device\_power\_settings \- Issue\(212679\) \- The module displays the following message if the value provided for the parameter power\_cap is not within the supported range of 0 to 32767\, Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\. +* ome\_inventory \- The plugin returns 50 results when a group is specified\. No results are shown when a group is not specified\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/575](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/575)\)\. +* redfish\_storage\_volume is enhanced to support iDRAC8\.\([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/625](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/625)\) + + +#### f5networks\.f5\_modules + +* bigip\_gtm\_monitor\_bigip \- fixed an issue where IP and port were not applied correctly when creating new monitor\. +* bigip\_gtm\_monitor\_firepass \- fixed an issue where IP and port were not applied correctly when creating new monitor\. +* bigip\_gtm\_monitor\_http \- fixed an issue where IP and port were not applied correctly when creating new monitor\. +* bigip\_gtm\_monitor\_https\- fixed an issue where IP and port were not applied correctly when creating new monitor\. +* bigip\_gtm\_monitor\_tcp \- fixed an issue where IP and port were not applied correctly when creating new monitor\. +* bigip\_gtm\_monitor\_tcp\_half\_open \- fixed an issue where IP and port were not applied correctly when creating new monitor\. +* bigip\_gtm\_topology\_region \- fixed an issue where if multiple states with spaces in values were defined\, module would throw invalid command error +* bigip\_gtm\_topology\_region \- fixed an issue where states names that contained spaces caused the idempotency to break\. +* bigip\_ssl\_key\_cert \- fixed an issue where the passphrase was not being properly send to the BIG\-IP\. + + +#### fortinet\.fortimanager + +* Added missing enum values for some arguments\. +* Change minimum required ansible\-core version to 2\.14\.0 +* Changed revision to v\_range to reduce the size of the code\. +* Fixed a bug where ansible may skip update incorrectly\. +* Fixed the behavior of module fmgr\_firewall\_internetservicecustom\. +* Fixed the behavior of some modules that contain the argument policyid\. +* Improved bypass\_validation\. If you now set bypass\_validation to true\, it will allow you to send parameters that are not defined in the schema\. +* Improved documentation\, added description for all \"no description\" modules\. +* Improved documentation\. +* Improved example ansible playbooks\. +* Improved the logic of fmgr\_fact\, fmgr\_clone\, fmgr\_rename\, fmgr\_move\. Usage remains unchanged\. +* Reduced the size of module\_arg\_spec in each module\. +* Removed most of the sanity test ignores\. +* Support FortiManager 7\.0\.10 +* Supported \"state\:absent\" for all modules end with \"\_objectmember\"\, \"\_scopemember\"\, and \"\_scetionvalue\"\. +* Supported FortiManager 6\.4\.14\, 7\.0\.11\, 7\.0\.12\, 7\.2\.5\. + + +#### fortinet\.fortios + +* Fix the issue that ssl\-certificate cannot be set in fortios\_firewall\_vip and fortios\_firewall\_vip6\. +* Github issue +* mantis issue + + +#### hetzner\.hcloud + +* hcloud inventory \- Ensure the API client use a new cache for every cached session\. +* inventory \- Ensure inventory host variables are serializable and can be cached\. +* load\_balancer\_info \- Correctly return the cookie\_lifetime value\. +* load\_balancer\_service \- Correctly return the cookie\_lifetime value\. +* primary\_ip \- Added the missing auto\_delete field to the return values\. +* primary\_ip \- The auto\_delete option is now used when creating or updating a Primary IP\. +* primary\_ip\_info \- Added the missing auto\_delete field to the return values\. +* server \- Do not remove the server from its placement group when the placement\_group argument is not specified\. +* server \- Pass an empty string to the placement\_group argument to remove a server from its placement group\. +* server\_network \- The returned alias\_ips list is now sorted\. + + +#### ibm\.qradar + +* A bunch of ansible\-lint and ansible\-test sanity issues have been fixed\. + + +#### ibm\.storage\_virtualize + +* ibm\_svc\_info \- Command and release mapping to remove errors in gather\_subset\=all +* ibm\_svc\_info \- Return error in listing entities that require object name + + +#### infoblox\.nios\_modules + +* Fixes environment variable max\_results using INFOBLOX\_MAX\_RESULTS [\#209](https\://github\.com/infobloxopen/infoblox\-ansible/pull/209) +* Fixes index error for transform fields in DTC LBDN \(auth\_zone and Pool\) and DTC POOL \(servers and monitors\) [\#209](https\://github\.com/infobloxopen/infoblox\-ansible/pull/209) +* Fixes typo for environment variable INFOBLOX\_WAPI\_VERSION [\#209](https\://github\.com/infobloxopen/infoblox\-ansible/pull/209) + + +#### junipernetworks\.junos + +* Fix the empty facts list placement +* Prevents module\_defaults from were being incorrectly applied to the platform action\, instead of the concerned module\. +* acls +* fix to gather l2\_interfaces facts with default port\-mode access\. +* initialize facts dictionary with empty containers for respective resources mentioned below +* lldp\_global +* lldp\_interfaces +* logging\_global +* ntp\_global +* ospf\_interfaces +* ospfv2 +* ospfv3 +* prefix\_lists +* routing\_instances +* routing\_options +* security\_policies +* security\_policies\_global +* security\_zones +* snmp\_server +* static\_routes +* vlans + + +#### kubernetes\.core + +* Resolve Collections util resource discovery fails when complex subresources present \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/676](https\://github\.com/ansible\-collections/kubernetes\.core/pull/676)\)\. +* align helmdiff\_check\(\) function commandline rendering with the deploy\(\) function \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/670](https\://github\.com/ansible\-collections/kubernetes\.core/pull/670)\)\. +* helm \- Put the chart\_ref into quotes when running helm show chart\, helm upgrade and helm dependency update commands \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/653](https\://github\.com/ansible\-collections/kubernetes\.core/issues/653)\)\. +* helm \- delete temporary file created when deploying chart with option release\_values set \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/530](https\://github\.com/ansible\-collections/kubernetes\.core/issues/530)\)\. +* helm \- expand kubeconfig path with user\'s home directory for consistency with k8s +* helm \- fix issue occurring when uninstalling chart with statues others than deployed \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/319](https\://github\.com/ansible\-collections/kubernetes\.core/issues/319)\)\. +* helm \- fix post\_renderer argument breaking the helm deploy\_command \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/586](https\://github\.com/ansible\-collections/kubernetes\.core/pull/586)\)\. +* helm \- use reuse\-values when running helm diff command \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/680](https\://github\.com/ansible\-collections/kubernetes\.core/issues/680)\)\. +* helm \- use post\_renderer when checking changed status for a helm release \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/588](https\://github\.com/ansible\-collections/kubernetes\.core/pull/588)\)\. +* integrations test helm\_kubeconfig \- set helm version to v3\.10\.3 to avoid incompatability with new bitnami charts \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/670](https\://github\.com/ansible\-collections/kubernetes\.core/pull/670)\)\. +* k8s\_json\_patch \- rename action symlink to ensure k8s action plugin is used \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/652](https\://github\.com/ansible\-collections/kubernetes\.core/pull/652)\)\. +* k8s\_scale \- clean handling of ResourceTimeout exception \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/583](https\://github\.com/ansible\-collections/kubernetes\.core/issues/583)\)\. +* k8s\_scale \- fix issue when scaling StatefulSets with updateStrategy\=OnDelete \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/579](https\://github\.com/ansible\-collections/kubernetes\.core/issues/579)\)\. + + +#### lowlydba\.sqlserver + +* Add ActiveStartDate to the compare properties so this item is marked accurately as changed\. +* Fixed the formatting of the SPN by updating the backslash to a forward\-slash for the \$spn var \(lowlydba\.sqlserver\.spn\) +* Update documentation for agent\_job\_schedule to reflect proper input formatting\. \([https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/229](https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/229)\) + + +#### microsoft\.ad + +* debug\_ldap\_client \- handle failures when attempting to get the krb5 context and default CCache rather than fail with a traceback +* microsoft\.ad\.group \- Support membership lookup of groups that are longer than 20 characters long +* microsoft\.ad\.membership \- Add helpful hint when the failure was due to a missing/invalid domain\_ou\_path \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/88](https\://github\.com/ansible\-collections/microsoft\.ad/issues/88) + + +#### netapp\.ontap + +* na\_ontap\_dns \- fix issue with modifying DNS servers in REST\. +* na\_ontap\_ems\_destination \- fix field error with certificate\.name for ONTAP 9\.11\.1 or later in REST\. +* na\_ontap\_fpolicy\_policy \- fixed issue with idempotency in REST\. +* na\_ontap\_igroup\_initiator \- fixed issue with idempotency\. +* na\_ontap\_nfs \- fix error with windows in REST for ONTAP 9\.10 or earlier\. +* na\_ontap\_quotas \- fixed issue with idempotency in REST\. +* na\_ontap\_security\_certificates \- fix error with ontap\_info returned in module output in REST\. +* na\_ontap\_security\_config \- added warning for missing supported\_cipher\_suites to maintain idempotency in REST\. +* na\_ontap\_snapshot\_policy \- fix issue with modifying snapshot policy in REST\. +* na\_ontap\_volume \- modified type to be case insensitive in REST\. +* na\_ontap\_vserver\_peer \- fix issue with peering multiple clusters with same vserver name in REST\. + + +#### netapp\.storagegrid + +* Removed fetch limit in API request and implemented pagination\. + + +#### netbox\.netbox + +* Improve error reporting for missing module \[\#1126\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1126](https\://github\.com/netbox\-community/ansible\_modules/pull/1126)\) +* nb\_inventory \- Fix API cache failure \[\#1111\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1111](https\://github\.com/netbox\-community/ansible\_modules/pull/1111)\) +* nb\_lookup \- Allow multiple IDs in nb\_lookup \[\#1042\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1042](https\://github\.com/netbox\-community/ansible\_modules/pull/1042)\) +* netbox\_vlan \- Fix documentation of vlan\_group \[\#1138\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1138](https\://github\.com/netbox\-community/ansible\_modules/pull/1138)\) + + +#### purestorage\.flasharray + +* purefa\_cert \- Fixed issue where parts of the subject where not included in the CSR if they did not exist in the currently used cert\. +* purefa\_certs \- Allow certificates of over 3000 characters to be imported\. +* purefa\_dns \- Fixed attribute error on deletion of management DNS +* purefa\_ds \- Fix issue with SDK returning empty data for data directory services even when it does exist +* purefa\_host \- Allows all current host inititators to be correctly removed +* purefa\_host \- Fix idempotency issue with connected volume +* purefa\_info \- Resolved issue with KeyError when LACP bonds are in use +* purefa\_inventory \- Fix issue with iSCSI\-only FlashArrays +* purefa\_pg \- Allows a protection group to be correctly created when target is specified as well as other objects\, such as volumes or hosts +* purefa\_pgsched \- Fixed issue with disabling schedules +* purefa\_pgsnap \- Add support for restoring volumes connected to hosts in a host\-based protection group and hosts in a hostgroup\-based protection group\. +* purefa\_pgsnap \- Fixed incorrect parameter name +* purefa\_policy \- Fix incorrect call of psot instead of patch for NFS policies +* purefa\_volume \- Ensure module response for creation of volume and rerun are the same +* purefa\_volume \- Fix idempotency issue with delete volume + + +#### purestorage\.flashblade + +* purefb\_bucket \- Changed logic to allow complex buckets to be created in a single call\, rather than having to split into two tasks\. +* purefb\_info \- Added missing object lock retention details if enabledd +* purefb\_lag \- Enable LAG port configuration with multi\-chassis +* purefb\_timeout \- Fixed arithmetic error that resulted in module incorrectly reporting changed when no change was required\. + + +#### splunk\.es + +* Fixed argspec validation for plugins with empty task attributes when run with Ansible 2\.9\. + + +#### telekom\_mms\.icinga\_director + +* Fixes \#190 \- Workaround for service apply bug \([https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/239](https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/239)\) +* change notification interval variable to int\-type \([https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/254](https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/254)\) +* set user\_groups in notification to empty list \([https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/255](https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/255)\) + + +#### theforeman\.foreman + +* compute\_profile\, host \- refer to VMware storage pods by name\, not id \([https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1247](https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1247)\) +* content\_view\_filter\_rule \- handle multiple rules for the same package but different architectures and versions correctly \([https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2189687](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2189687)\) + + +#### vmware\.vmware\_rest + +* content\_library\_item\_info \- fixed error with unsupported property +* lookup plugins \- Refactor to use native options configuration via doc\_fragment\, which ensures that vcenter\_validate\_certs\=false is honored \([https\://github\.com/ansible\-collections/vmware\.vmware\_rest/issues/425](https\://github\.com/ansible\-collections/vmware\.vmware\_rest/issues/425)\)\. + + +#### vultr\.cloud + +* Fixed an error while waiting for a specific state and the API returns an empty response\. \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/108](https\://github\.com/vultr/ansible\-collection\-vultr/issues/108)\)\. +* Fixed an issue with waiting for state \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/102](https\://github\.com/vultr/ansible\-collection\-vultr/pull/102)\)\. +* instance \- Fixed an issue detecting the instance state returned by the API \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/89](https\://github\.com/vultr/ansible\-collection\-vultr/pull/89)\)\. +* instance\_info \- Fixed the alias name being was used on the wrong argument\. \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/105](https\://github\.com/vultr/ansible\-collection\-vultr/issues/105)\)\. +* reserved\_ip \- Fixed an issue which caused the module to fail\, also enabled integration tests \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/92](https\://github\.com/vultr/ansible\-collection\-vultr/issues/92)\)\. + + +### Known Issues + + +#### community\.docker + +* Please note that the fix for requests 2\.32\.0 included in community\.docker 3\.10\.1 only + fixes problems with the vendored Docker SDK for Python code\. Modules and plugins that + use Docker SDK for Python can still fail due to the SDK currently being incompatible + with requests 2\.32\.0\. + + If you still experience problems with requests 2\.32\.0\, such as error messages like + Not supported URL scheme http\+docker\, please restrict requests to \<2\.32\.0\. + + +#### dellemc\.openmanage + +* idrac\_diagnostics \- Issue\(285322\) \- This module doesn\'t support export of diagnostics file to HTTP and HTTPS share via SOCKS proxy\. +* idrac\_firmware \- Issue\(279282\) \- This module does not support firmware update using HTTP\, HTTPS\, and FTP shares with authentication on iDRAC8\. +* idrac\_network\_attributes \- Issue\(279049\) \- If unsupported values are provided for the parameter ome\_network\_attributes\, then this module does not provide a correct error message\. +* idrac\_storage\_volume \- Issue\(290766\) \- The module will report success instead of showing failure for new virtual creation on the BOSS\-N1 controller if a virtual disk is already present on the same controller\. +* ome\_device\_network\_services \- Issue\(212681\) \- The module does not provide a proper error message if unsupported values are provided for the following parameters\- port\_number\, community\_name\, max\_sessions\, max\_auth\_retries\, and idle\_timeout\. +* ome\_device\_power\_settings \- Issue\(212679\) \- The module displays the following message if the value provided for the parameter power\_cap is not within the supported range of 0 to 32767\, Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\. +* ome\_device\_quick\_deploy \- Issue\(275231\) \- This module does not deploy a new configuration to a slot that has disabled IPv6\. +* ome\_diagnostics \- Issue\(279193\) \- Export of SupportAssist collection logs to the share location fails on OME version 4\.0\.0\. +* ome\_smart\_fabric\_uplink \- Issue\(186024\) \- The module supported by OpenManage Enterprise Modular\, however it does not allow the creation of multiple uplinks of the same name\. If an uplink is created using the same name as an existing uplink\, then the existing uplink is modified\. + + +### New Plugins + + +#### Become + +* community\.general\.run0 \- Systemd\'s run0\. + + +#### Callback + +* community\.general\.default\_without\_diff \- The default ansible callback without diff output\. +* community\.general\.timestamp \- Adds simple timestamp for each header\. + + +#### Connection + +* community\.general\.incus \- Run tasks in Incus instances via the Incus CLI\. + + +#### Filter + +* ansible\.utils\.fact\_diff \- Find the difference between currently set facts +* community\.crypto\.parse\_serial \- Convert a serial number as a colon\-separated list of hex numbers to an integer +* community\.crypto\.to\_serial \- Convert an integer to a colon\-separated list of hex numbers +* community\.dns\.quote\_txt \- Quotes a string to use as a TXT record entry +* community\.dns\.unquote\_txt \- Unquotes a TXT record entry to a string +* community\.general\.from\_ini \- Converts INI text input into a dictionary\. +* community\.general\.lists\_difference \- Difference of lists with a predictive order\. +* community\.general\.lists\_intersect \- Intersection of lists with a predictive order\. +* community\.general\.lists\_symmetric\_difference \- Symmetric Difference of lists with a predictive order\. +* community\.general\.lists\_union \- Union of lists with a predictive order\. +* community\.general\.to\_ini \- Converts a dictionary to the INI file format\. +* microsoft\.ad\.dn\_escape \- Escape an LDAP DistinguishedName value string\. +* microsoft\.ad\.parse\_dn \- Parses an LDAP DistinguishedName string into an object\. + + +#### Lookup + +* community\.general\.github\_app\_access\_token \- Obtain short\-lived Github App Access tokens\. +* community\.general\.onepassword\_doc \- Fetch documents stored in 1Password\. + + +#### Test + +* community\.general\.fqdn\_valid \- Validates fully\-qualified domain names against RFC 1123\. + + +### New Modules + + +#### amazon\.aws + +* amazon\.aws\.rds\_cluster\_param\_group \- Manage RDS cluster parameter groups +* amazon\.aws\.rds\_cluster\_param\_group\_info \- Describes the properties of specific RDS cluster parameter group\. +* amazon\.aws\.rds\_engine\_versions\_info \- Describes the properties of specific versions of DB engines\. + + +#### ansible\.netcommon + +* ansible\.netcommon\.cli\_restore \- Restore device configuration to network devices over network\_cli + + +#### check\_point\.mgmt + +* check\_point\.mgmt\.cp\_mgmt\_add\_central\_license \- Add central license\. +* check\_point\.mgmt\.cp\_mgmt\_central\_license\_facts \- Get central\-license objects facts on Checkpoint over Web Services API\. +* check\_point\.mgmt\.cp\_mgmt\_delete\_central\_license \- Delete central license\. +* check\_point\.mgmt\.cp\_mgmt\_distribute\_cloud\_licenses \- Distribute licenses to target CloudGuard gateways\. +* check\_point\.mgmt\.cp\_mgmt\_show\_cloud\_licenses\_usage \- Show attached licenses usage\. +* check\_point\.mgmt\.cp\_mgmt\_show\_ha\_status \- Retrieve domain high availability status\. + + +#### cisco\.ios + +* cisco\.ios\.ios\_evpn\_evi \- Resource module to configure L2VPN EVPN EVI\. +* cisco\.ios\.ios\_evpn\_global \- Resource module to configure L2VPN EVPN\. +* cisco\.ios\.ios\_vxlan\_vtep \- Resource module to configure VXLAN VTEP interface\. + + +#### community\.aws + +* community\.aws\.dynamodb\_table\_info \- Returns information about a Dynamo DB table + + +#### community\.crypto + +* community\.crypto\.acme\_ari\_info \- Retrieves ACME Renewal Information \(ARI\) for a certificate\. +* community\.crypto\.acme\_certificate\_deactivate\_authz \- Deactivate all authz for an ACME v2 order\. +* community\.crypto\.acme\_certificate\_renewal\_info \- Determine whether a certificate should be renewed or not\. +* community\.crypto\.x509\_certificate\_convert \- Convert X\.509 certificates + + +#### community\.digitalocean + +* community\.digitalocean\.digital\_ocean\_project\_resource\_info \- Gather information about DigitalOcean Project Resources + + +#### community\.docker + +* community\.docker\.docker\_compose\_v2 \- Manage multi\-container Docker applications with Docker Compose CLI plugin +* community\.docker\.docker\_compose\_v2\_pull \- Pull a Docker compose project +* community\.docker\.docker\_image\_build \- Build Docker images using Docker buildx +* community\.docker\.docker\_image\_export \- Export \(archive\) Docker images +* community\.docker\.docker\_image\_pull \- Pull Docker images from registries +* community\.docker\.docker\_image\_push \- Push Docker images to registries +* community\.docker\.docker\_image\_remove \- Remove Docker images +* community\.docker\.docker\_image\_tag \- Tag Docker images with new names and/or tags + + +#### community\.general + +* community\.general\.consul\_acl\_bootstrap \- Bootstrap ACLs in Consul\. +* community\.general\.consul\_auth\_method \- Manipulate Consul auth methods\. +* community\.general\.consul\_binding\_rule \- Manipulate Consul binding rules\. +* community\.general\.consul\_token \- Manipulate Consul tokens\. +* community\.general\.django\_command \- Run Django admin commands\. +* community\.general\.dnf\_config\_manager \- Enable or disable dnf repositories using config\-manager\. +* community\.general\.git\_config\_info \- Read git configuration\. +* community\.general\.gitlab\_group\_access\_token \- Manages GitLab group access tokens\. +* community\.general\.gitlab\_issue \- Create\, update\, or delete GitLab issues\. +* community\.general\.gitlab\_label \- Creates/updates/deletes GitLab Labels belonging to project or group\. +* community\.general\.gitlab\_milestone \- Creates/updates/deletes GitLab Milestones belonging to project or group\. +* community\.general\.gitlab\_project\_access\_token \- Manages GitLab project access tokens\. +* community\.general\.keycloak\_client\_rolescope \- Allows administration of Keycloak client roles scope to restrict the usage of certain roles to a other specific client applications\. +* community\.general\.keycloak\_component\_info \- Retrive component info in Keycloak\. +* community\.general\.keycloak\_realm\_rolemapping \- Allows administration of Keycloak realm role mappings into groups with the Keycloak API\. +* community\.general\.nomad\_token \- Manage Nomad ACL tokens\. +* community\.general\.proxmox\_node\_info \- Retrieve information about one or more Proxmox VE nodes\. +* community\.general\.proxmox\_storage\_contents\_info \- List content from a Proxmox VE storage\. +* community\.general\.usb\_facts \- Allows listing information about USB devices\. + + +#### community\.hashi\_vault + +* community\.hashi\_vault\.vault\_database\_connection\_configure \- Configures the database engine +* community\.hashi\_vault\.vault\_database\_connection\_delete \- Delete a Database Connection +* community\.hashi\_vault\.vault\_database\_connection\_read \- Returns the configuration settings for a O\(connection\_name\) +* community\.hashi\_vault\.vault\_database\_connection\_reset \- Closes a O\(connection\_name\) and its underlying plugin and restarts it with the configuration stored +* community\.hashi\_vault\.vault\_database\_connections\_list \- Returns a list of available connections +* community\.hashi\_vault\.vault\_database\_role\_create \- Creates or updates a \(dynamic\) role definition +* community\.hashi\_vault\.vault\_database\_role\_delete \- Delete a role definition +* community\.hashi\_vault\.vault\_database\_role\_read \- Queries a dynamic role definition +* community\.hashi\_vault\.vault\_database\_roles\_list \- Returns a list of available \(dynamic\) roles +* community\.hashi\_vault\.vault\_database\_rotate\_root\_credentials \- Rotates the root credentials stored for the database connection\. This user must have permissions to update its own password\. +* community\.hashi\_vault\.vault\_database\_static\_role\_create \- Create or update a static role +* community\.hashi\_vault\.vault\_database\_static\_role\_get\_credentials \- Returns the current credentials based on the named static role +* community\.hashi\_vault\.vault\_database\_static\_role\_read \- Queries a static role definition +* community\.hashi\_vault\.vault\_database\_static\_role\_rotate\_credentials \- Trigger the credential rotation for a static role +* community\.hashi\_vault\.vault\_database\_static\_roles\_list \- Returns a list of available static roles + + +#### community\.zabbix + +* community\.zabbix\.zabbix\_correlation \- Create/update/delete Zabbix correlation + + +#### containers\.podman + +* containers\.podman\.podman\_secret\_info \- Secrets info module + + +#### dellemc\.enterprise\_sonic + +* dellemc\.enterprise\_sonic\.sonic\_dhcp\_snooping \- Manage DHCP Snooping on SONiC +* dellemc\.enterprise\_sonic\.sonic\_pki \- Manages PKI attributes of Enterprise Sonic +* dellemc\.enterprise\_sonic\.sonic\_stp \- Manage STP configuration on SONiC + + +#### dellemc\.openmanage + +* dellemc\.openmanage\.idrac\_diagnostics \- This module allows to run and export diagnostics on iDRAC\. +* dellemc\.openmanage\.idrac\_license \- This module allows to import\, export\, and delete licenses on iDRAC\. +* dellemc\.openmanage\.idrac\_session \- Allows you to create and delete the sessions on iDRAC\. +* dellemc\.openmanage\.idrac\_storage\_volume \- Configures the RAID configuration attributes\. + + +#### dellemc\.powerflex + +* dellemc\.powerflex\.fault\_set \- Manage Fault Sets on Dell PowerFlex +* dellemc\.powerflex\.resource\_group \- Manage resource group deployments on Dell PowerFlex + + +#### fortinet\.fortimanager + +* fortinet\.fortimanager\.fmgr\_diameterfilter\_profile \- Configure Diameter filter profiles\. +* fortinet\.fortimanager\.fmgr\_firewall\_accessproxysshclientcert \- Configure Access Proxy SSH client certificate\. +* fortinet\.fortimanager\.fmgr\_firewall\_accessproxysshclientcert\_certextension \- Configure certificate extension for user certificate\. +* fortinet\.fortimanager\.fmgr\_firewall\_vip6\_quic \- QUIC setting\. +* fortinet\.fortimanager\.fmgr\_firewall\_vip\_gslbpublicips \- Publicly accessible IP addresses for the FortiGSLB service\. +* fortinet\.fortimanager\.fmgr\_sctpfilter\_profile \- Configure SCTP filter profiles\. +* fortinet\.fortimanager\.fmgr\_sctpfilter\_profile\_ppidfilters \- PPID filters list\. +* fortinet\.fortimanager\.fmgr\_switchcontroller\_managedswitch\_vlan \- Configure VLAN assignment priority\. +* fortinet\.fortimanager\.fmgr\_system\_admin\_profile\_writepasswdprofiles \- Profile list\. +* fortinet\.fortimanager\.fmgr\_system\_admin\_profile\_writepasswduserlist \- User list\. +* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam \- Configure NPU TCAM policies\. +* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_data \- Data fields of TCAM\. +* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_mask \- Mask fields of TCAM\. +* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_miract \- Mirror action of TCAM\. +* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_priact \- Priority action of TCAM\. +* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_sact \- Source action of TCAM\. +* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_tact \- Target action of TCAM\. +* fortinet\.fortimanager\.fmgr\_videofilter\_keyword \- Configure video filter keywords\. +* fortinet\.fortimanager\.fmgr\_videofilter\_keyword\_word \- List of keywords\. +* fortinet\.fortimanager\.fmgr\_videofilter\_profile\_filters \- YouTube filter entries\. +* fortinet\.fortimanager\.fmgr\_videofilter\_youtubekey \- Configure YouTube API keys\. + + +#### hetzner\.hcloud + +* hetzner\.hcloud\.firewall\_resource \- Manage Resources a Hetzner Cloud Firewall is applied to\. + + +#### infoblox\.nios\_modules + +* infoblox\.nios\_modules\.nios\_dtc\_monitor\_http \- Configures the Infoblox NIOS DTC HTTP monitor\. +* infoblox\.nios\_modules\.nios\_dtc\_monitor\_icmp \- Configures the Infoblox NIOS DTC ICMP monitor +* infoblox\.nios\_modules\.nios\_dtc\_monitor\_pdp \- Configures the Infoblox NIOS DTC PDP monitor +* infoblox\.nios\_modules\.nios\_dtc\_monitor\_sip \- Configures the Infoblox NIOS DTC SIP monitor +* infoblox\.nios\_modules\.nios\_dtc\_monitor\_snmp \- Configures the Infoblox NIOS DTC SNMP monitor +* infoblox\.nios\_modules\.nios\_dtc\_monitor\_tcp \- Configures the Infoblox NIOS DTC TCP monitor +* infoblox\.nios\_modules\.nios\_dtc\_topology \- Configures the Infoblox NIOS DTC Topology + + +#### netapp\.ontap + +* netapp\.ontap\.na\_ontap\_cifs\_unix\_symlink\_mapping \- NetApp ONTAP module to manage UNIX symbolic link mapping for CIFS clients\. +* netapp\.ontap\.na\_ontap\_cli\_timeout \- NetApp ONTAP module to set the CLI inactivity timeout value\. +* netapp\.ontap\.na\_ontap\_snmp\_config \- NetApp ONTAP module to modify SNMP configuration\. + + +#### netbox\.netbox + +* netbox\.netbox\.netbox\_custom\_field\_choice\_set \- Create\, updates\, or removes Custom Field Choice sets +* netbox\.netbox\.netbox\_module\_bay \- Create\, updates\, or removes Module Bay +* netbox\.netbox\.netbox\_virtual\_disk \- Create\, updates\, or removes a disk from a Virtual Machine + + +#### purestorage\.flasharray + +* purestorage\.flasharray\.purefa\_hardware \- Manage FlashArray Hardware Identification + + +#### purestorage\.flashblade + +* purestorage\.flashblade\.purefb\_hardware \- Manage FlashBlade Hardware + + +#### theforeman\.foreman + +* theforeman\.foreman\.registration\_command \- Manage Registration Command +* theforeman\.foreman\.webhook \- Manage Webhooks + + +#### vultr\.cloud + +* vultr\.cloud\.object\_storage \- Manages object storages on Vultr + + +### New Roles + +* dellemc\.openmanage\.idrac\_user \- Role to manage local users of iDRAC\. + + +### Unchanged Collections + +* ansible\.posix \(still version 1\.5\.4\) +* chocolatey\.chocolatey \(still version 1\.5\.1\) +* cisco\.ucs \(still version 1\.10\.0\) +* cloudscale\_ch\.cloud \(still version 2\.3\.1\) +* community\.libvirt \(still version 1\.3\.0\) +* community\.network \(still version 5\.0\.2\) +* community\.proxysql \(still version 1\.5\.1\) +* community\.sops \(still version 1\.6\.7\) +* cyberark\.conjur \(still version 1\.2\.2\) +* frr\.frr \(still version 2\.0\.2\) +* ibm\.spectrum\_virtualize \(still version 2\.0\.0\) +* inspur\.sm \(still version 2\.3\.0\) +* netapp\.cloudmanager \(still version 21\.22\.1\) +* netapp\_eseries\.santricity \(still version 1\.4\.0\) +* ngine\_io\.cloudstack \(still version 2\.3\.0\) +* ngine\_io\.exoscale \(still version 1\.1\.0\) +* openvswitch\.openvswitch \(still version 2\.1\.1\) +* ovirt\.ovirt \(still version 3\.2\.0\) +* sensu\.sensu\_go \(still version 1\.14\.0\) +* t\_systems\_mms\.icinga\_director \(still version 2\.0\.1\) +* vyos\.vyos \(still version 4\.1\.0\) +* wti\.remote \(still version 1\.0\.5\) diff --git a/CHANGELOG-v10.rst b/CHANGELOG-v10.rst new file mode 100644 index 000000000..32fd96860 --- /dev/null +++ b/CHANGELOG-v10.rst @@ -0,0 +1,2952 @@ +======================== +Ansible 10 Release Notes +======================== + +This changelog describes changes since Ansible 9.0.0. + +.. contents:: + :depth: 2 + +v10.0.0 +======= + +.. contents:: + :local: + :depth: 2 + +Release Summary +--------------- + +Release Date: 2024-06-04 + +`Porting Guide `_ + +Removed Collections +------------------- + +- community.azure (previously included version: 2.0.0) +- community.sap (previously included version: 2.0.0) +- gluster.gluster (previously included version: 1.0.2) +- hpe.nimble (previously included version: 1.1.4) +- netapp.aws (previously included version: 21.7.1) +- netapp.azure (previously included version: 21.10.1) +- netapp.elementsw (previously included version: 21.7.0) +- netapp.um_info (previously included version: 21.8.1) +- purestorage.fusion (previously included version: 1.6.0) + +Added Collections +----------------- + +- community.library_inventory_filtering_v1 (version 1.0.1) +- kaytus.ksmanage (version 1.2.1) + +Ansible-core +------------ + +Ansible 10.0.0 contains ansible-core version 2.17.0. +This is a newer version than version 2.16.0 contained in the previous Ansible release. + +The changes are reported in the combined changelog below. + +Included Collections +-------------------- + +If not mentioned explicitly, the changes are reported in the combined changelog below. + ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| Collection | Ansible 9.0.0 | Ansible 10.0.0 | Notes | ++==========================================+===============+================+==============================================================================================================================+ +| amazon.aws | 7.0.0 | 8.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| ansible.netcommon | 5.3.0 | 6.1.2 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| ansible.utils | 2.11.0 | 4.1.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| ansible.windows | 2.1.0 | 2.3.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| arista.eos | 6.2.1 | 9.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| awx.awx | 23.3.1 | 24.3.1 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| azure.azcollection | 1.19.0 | 2.3.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| check_point.mgmt | 5.1.1 | 5.2.3 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.aci | 2.8.0 | 2.9.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.asa | 4.0.3 | 5.0.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.dnac | 6.7.6 | 6.13.3 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.intersight | 2.0.3 | 2.0.9 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.ios | 5.2.0 | 8.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.iosxr | 6.1.0 | 9.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.ise | 2.5.16 | 2.9.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.meraki | 2.16.14 | 2.18.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.mso | 2.5.0 | 2.6.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cisco.nxos | 5.2.1 | 8.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cloud.common | 2.1.4 | 3.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.aws | 7.0.0 | 8.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.ciscosmb | 1.0.7 | 1.0.9 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.crypto | 2.16.0 | 2.20.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.digitalocean | 1.24.0 | 1.26.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.dns | 2.6.3 | 3.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.docker | 3.4.11 | 3.10.3 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.general | 8.0.2 | 9.0.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.grafana | 1.6.1 | 1.9.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.hashi_vault | 6.0.0 | 6.2.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.hrobot | 1.8.2 | 2.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.library_inventory_filtering_v1 | | 1.0.1 | The collection was added to Ansible | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.mongodb | 1.6.3 | 1.7.4 | There are no changes recorded in the changelog. | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.mysql | 3.8.0 | 3.9.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.okd | 2.3.0 | 3.0.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.postgresql | 3.2.0 | 3.4.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.rabbitmq | 1.2.3 | 1.3.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.routeros | 2.10.0 | 2.15.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.sap_libs | 1.4.1 | 1.4.2 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.vmware | 4.0.0 | 4.4.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.windows | 2.0.0 | 2.2.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| community.zabbix | 2.1.0 | 2.4.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| containers.podman | 1.11.0 | 1.13.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| cyberark.pas | 1.0.23 | 1.0.25 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| dellemc.enterprise_sonic | 2.2.0 | 2.4.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| dellemc.openmanage | 8.4.0 | 9.2.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| dellemc.powerflex | 2.0.1 | 2.4.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| dellemc.unity | 1.7.1 | 2.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| f5networks.f5_modules | 1.27.0 | 1.28.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| fortinet.fortimanager | 2.3.0 | 2.5.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| fortinet.fortios | 2.3.4 | 2.3.6 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| google.cloud | 1.2.0 | 1.3.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| grafana.grafana | 2.2.3 | 5.2.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| hetzner.hcloud | 2.3.0 | 3.1.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| ibm.qradar | 2.1.0 | 3.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| ibm.storage_virtualize | 2.1.0 | 2.3.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| infinidat.infinibox | 1.3.12 | 1.4.5 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| infoblox.nios_modules | 1.5.0 | 1.6.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| inspur.ispim | 2.1.0 | 2.2.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| junipernetworks.junos | 5.3.0 | 8.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| kaytus.ksmanage | | 1.2.1 | The collection was added to Ansible | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| kubernetes.core | 2.4.0 | 3.1.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| lowlydba.sqlserver | 2.2.2 | 2.3.2 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| microsoft.ad | 1.3.0 | 1.5.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| netapp.ontap | 22.8.2 | 22.11.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| netapp.storagegrid | 21.11.1 | 21.12.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| netbox.netbox | 3.15.0 | 3.18.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| openstack.cloud | 2.1.0 | 2.2.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| purestorage.flasharray | 1.22.0 | 1.28.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| purestorage.flashblade | 1.14.0 | 1.17.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| splunk.es | 2.1.0 | 3.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| telekom_mms.icinga_director | 1.34.1 | 2.1.2 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| theforeman.foreman | 3.14.0 | 4.0.0 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| vmware.vmware_rest | 2.3.1 | 3.0.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ +| vultr.cloud | 1.10.0 | 1.12.1 | | ++------------------------------------------+---------------+----------------+------------------------------------------------------------------------------------------------------------------------------+ + +Major Changes +------------- + +Ansible-core +~~~~~~~~~~~~ + +- urls.py - Removed support for Python 2 + +ansible.netcommon +~~~~~~~~~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + +ansible.utils +~~~~~~~~~~~~~ + +- Bumping `netaddr` to `>=0.10.1`, means that starting from this release, the minimum `netaddr` version this collection requires is `>=0.10.1`. +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. +- 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. + +arista.eos +~~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. +- This release removes previously deprecated modules and attributes from this collection. Please refer to the **Removed Features** section for details. +- Update the netcommon base version 6.1.0 to support cli_restore plugin. + +cisco.asa +~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + +cisco.ios +~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. +- Update the netcommon base version 6.1.0 to support cli_restore plugin. +- ios_ntp - Remove deprecated ntp legacy module + +cisco.iosxr +~~~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. +- This release removes previously deprecated module and attributes from this collection. Please refer to the **Removed Features** section for details. +- Update the netcommon base version to support cli_restore plugin. + +cisco.nxos +~~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. +- This release removes four previously deprecated modules from this collection. Please refer to the **Removed Features** section for details. +- Updated the minimum required ansible.netcommon version to 6.1.0 to support the cli_restore module. + +community.dns +~~~~~~~~~~~~~ + +- The ``community.dns`` collection now depends on the ``community.library_inventory_filtering_v1`` collection. This utility collection provides host filtering functionality for inventory plugins. If you use the Ansible community package, both collections are included and you do not have to do anything special. If you install the collection with ``ansible-galaxy collection install``, it will be installed automatically. If you install the collection by copying the files of the collection to a place where ansible-core can find it, for example by cloning the git repository, you need to make sure that you also have to install the dependency if you are using the inventory plugins (https://github.com/ansible-collections/community.dns/pull/196). + +community.docker +~~~~~~~~~~~~~~~~ + +- The ``community.docker`` collection now depends on the ``community.library_inventory_filtering_v1`` collection. This utility collection provides host filtering functionality for inventory plugins. If you use the Ansible community package, both collections are included and you do not have to do anything special. If you install the collection with ``ansible-galaxy collection install``, it will be installed automatically. If you install the collection by copying the files of the collection to a place where ansible-core can find it, for example by cloning the git repository, you need to make sure that you also have to install the dependency if you are using the inventory plugins (https://github.com/ansible-collections/community.docker/pull/698). + +community.hashi_vault +~~~~~~~~~~~~~~~~~~~~~ + +- requirements - the ``requests`` package which is required by ``hvac`` now has a more restrictive range for this collection in certain use cases due to breaking security changes in ``ansible-core`` that were backported (https://github.com/ansible-collections/community.hashi_vault/pull/416). + +community.hrobot +~~~~~~~~~~~~~~~~ + +- The ``community.hrobot`` collection now depends on the ``community.library_inventory_filtering_v1`` collection. This utility collection provides host filtering functionality for inventory plugins. If you use the Ansible community package, both collections are included and you do not have to do anything special. If you install the collection with ``ansible-galaxy collection install``, it will be installed automatically. If you install the collection by copying the files of the collection to a place where ansible-core can find it, for example by cloning the git repository, you need to make sure that you also have to install the dependency if you are using the inventory plugin (https://github.com/ansible-collections/community.hrobot/pull/101). + +community.mysql +~~~~~~~~~~~~~~~ + +- Collection version 2.*.* is EOL, no more bugfixes will be backported. Please consider upgrading to the latest version. + +containers.podman +~~~~~~~~~~~~~~~~~ + +- Add quadlet support for Podman modules + +dellemc.openmanage +~~~~~~~~~~~~~~~~~~ + +- All OME modules are enhanced to support the environment variables `OME_USERNAME` and `OME_PASSWORD` as fallback for credentials. +- All iDRAC and Redfish modules are enhanced to support the environment variables `IDRAC_USERNAME` and `IDRAC_PASSWORD` as fallback for credentials. +- idrac_certificates - The module is enhanced to support the import and export of `CUSTOMCERTIFICATE`. +- idrac_diagnostics - The module is introduced to run and export diagnostics on iDRAC. +- idrac_gather_facts - This role is enhanced to support secure boot. +- idrac_license - The module is introduced to configure iDRAC licenses. +- idrac_session - This module allows you to create and delete the sessions on iDRAC. +- idrac_user - This role is introduced to manage local users of iDRAC. + +dellemc.unity +~~~~~~~~~~~~~ + +- Adding support for Unity Puffin v5.4. + +fortinet.fortios +~~~~~~~~~~~~~~~~ + +- Add notes for backup modules in the documentation in both monitor and monitor_fact modules. +- Supported new FOS versions 7.4.2 and 7.4.3, and support data type mac_address in the collection. +- Update all the boolean values to true/false in the documents and examples. +- Update the document of log_fact. +- Update the documentation for the supported versions from latest to a fix version number. +- Update the mismatched version message with version ranges. +- Update the required ansible version to 2.14. +- Update the required ansible version to 2.15. +- Update the supported version ranges instead of concrete version numbers to reduce the collection size. + +grafana.grafana +~~~~~~~~~~~~~~~ + +- Add Grafana Loki role by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/188 +- Add Grafana Mimir role by @GVengelen in https://github.com/grafana/grafana-ansible-collection/pull/183 +- Add a new config part to configure KeyCloak based auth by @he0s in https://github.com/grafana/grafana-ansible-collection/pull/191 +- Add an Ansible role for Grafana Alloy by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/169 +- Add an Ansible role for OpenTelemetry Collector by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/138 +- Add promtail role by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/197 +- Bump ansible-lint from 24.2.2 to 24.2.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/195 + +ibm.qradar +~~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + +infoblox.nios_modules +~~~~~~~~~~~~~~~~~~~~~ + +- Upgrade Ansible version support from 2.13 to 2.16. +- Upgrade Python version support from 3.8 to 3.10. + +junipernetworks.junos +~~~~~~~~~~~~~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. +- This release removes previously deprecated modules from this collection. Please refer to the **Removed Features** section for details. +- Update the netcommon base version 6.1.0 to support cli_restore plugin. + +splunk.es +~~~~~~~~~ + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + +Minor Changes +------------- + +Ansible-core +~~~~~~~~~~~~ + +- Add ``dump`` and ``passno`` mount information to facts component (https://github.com/ansible/ansible/issues/80478) +- Added MIRACLE LINUX 9.2 in RedHat OS Family. +- Interpreter Discovery - Remove hardcoded references to specific python interpreters to use for certain distro versions, and modify logic for python3 to become the default. +- Use Python's built-in ``functools.update_wrapper`` instead an inline copy from Python 3.7. +- User can now set ansible.log to record higher verbosity than what is specified for display via new configuration item LOG_VERBOSITY. +- ``DEFAULT_PRIVATE_ROLE_VARS`` is now overridden by explicit setting of ``public`` for ``include_roles`` and ``import_roles``. +- ``ansible-galaxy role|collection init`` - accept ``--extra-vars`` to supplement/override the variables ``ansible-galaxy`` injects for templating ``.j2`` files in the skeleton. +- ``import_role`` action now also gets a ``public`` option that controls variable exports, default depending on ``DEFAULT_PRIVATE_ROLE_VARS`` (if using defaults equates to ``public=True``). +- added configuration item ``TARGET_LOG_INFO`` that allows the user/author to add an information string to the log output on targets. +- ansible-doc - treat double newlines in documentation strings as paragraph breaks. This is useful to create multi-paragraph notes in module/plugin documentation (https://github.com/ansible/ansible/pull/82465). +- ansible-doc output has been revamped to make it more visually pleasing when going to a terminal, also more concise, use -v to show extra information. +- ansible-galaxy - Started normalizing build directory with a trailing separator when building collections, internally. (https://github.com/ansible/ansible/pull/81619). +- ansible-galaxy dependency resolution messages have changed the unexplained 'virtual' collection for the specific type ('scm', 'dir', etc) that is more user friendly +- ansible-test - Add Alpine 3.19 container. +- ansible-test - Add Alpine 3.19 to remotes. +- ansible-test - Add Fedora 39 container. +- ansible-test - Add Fedora 39 remote. +- ansible-test - Add a work-around for permission denied errors when using ``pytest >= 8`` on multi-user systems with an installed version of ``ansible-test``. +- ansible-test - Add support for RHEL 9.3 remotes. +- ansible-test - Added a macOS 14.3 remote VM. +- ansible-test - Bump the ``nios-test-container`` from version 2.0.0 to version 3.0.0. +- ansible-test - Containers and remotes managed by ansible-test will have their Python ``EXTERNALLY-MANAGED`` marker (PEP668) removed. This provides backwards compatibility for existing tests running in newer environments which mark their Python as externally managed. A future version of ansible-test may change this behavior, requiring tests to be adapted to such environments. +- ansible-test - Make Python 3.12 the default version used in the ``base`` and ``default`` containers. +- ansible-test - Remove Alpine 3(.18) container. +- ansible-test - Remove Alpine 3.18 from remotes. +- ansible-test - Remove Fedora 38 remote support. +- ansible-test - Remove Fedora 38 test container. +- ansible-test - Remove rhel/9.2 test remote +- ansible-test - Remove the FreeBSD 13.2 remote. +- ansible-test - Removed fallback to ``virtualenv`` when ``-m venv`` is non-functional. +- ansible-test - Removed test remotes: macos/13.2 +- ansible-test - Removed the ``no-basestring`` sanity test. The test is no longer necessary now that Python 3 is required. +- ansible-test - Removed the ``no-dict-iteritems``, ``no-dict-iterkeys`` and ``no-dict-itervalues`` sanity tests. The tests are no longer necessary since Python 3 is required. +- ansible-test - Removed the ``no-main-display`` sanity test. The unwanted pattern is unlikely to occur, since the test has existed since Ansible 2.8. +- ansible-test - Removed the ``no-unicode-literals`` sanity test. The test is unnecessary now that Python 3 is required and the ``unicode_literals`` feature has no effect. +- ansible-test - Special handling for installation of ``cryptography`` has been removed, as it is no longer necessary. +- ansible-test - The ``shellcheck`` sanity test no longer disables the ``SC2164`` check. In most cases, seeing this error means the script is missing ``set -e``. +- ansible-test - The ``unidiomatic-typecheck`` rule has been enabled in the ``pylint`` sanity test. +- ansible-test - The ``unidiomatic-typecheck`` rule has been removed from the ``validate-modules`` sanity test. +- ansible-test - Update the base and default containers to use Ubuntu 22.04 for the base image. This also updates PowerShell to version 7.4.0 with .NET 8.0.0 and ShellCheck to version 0.8.0. +- ansible-test - Updated the CloudStack test container to version 1.7.0. +- ansible-test - Updated the distro test containers to version 6.3.0 to include coverage 7.3.2 for Python 3.8+. The alpine3 container is now based on 3.18 instead of 3.17 and includes Python 3.11 instead of Python 3.10. +- ansible-test - Updated the distro test containers to version 7.1.0. +- ansible-test - When ansible-test installs requirements, it now instructs pip to allow installs on externally managed environments as defined by PEP 668. This only occurs in ephemeral environments managed by ansible-test, such as containers, or when the `--requirements` option is used. +- ansible-test - When invoking ``sleep`` in containers during container setup, the ``env`` command is used to avoid invoking the shell builtin, if present. +- ansible-test - document block name now included in error message for YAML parsing errors (https://github.com/ansible/ansible/issues/82353). +- ansible-test - sanity test allows ``EXAMPLES`` to be multi-document YAML (https://github.com/ansible/ansible/issues/82353). +- ansible-test now has FreeBSD 13.3 and 14.0 support +- ansible.builtin.user - Remove user not found warning (https://github.com/ansible/ansible/issues/80267) +- apt_repository.py - use api.launchpad.net endpoint instead of launchpad.net/api +- async tasks can now also support check mode at the same time. +- async_status now supports check mode. +- constructed inventory plugin - Adding a note that only group_vars of explicit groups are loaded (https://github.com/ansible/ansible/pull/82580). +- csvfile - add a keycol parameter to specify in which column to search. +- dnf - add the ``best`` option +- dnf5 - add the ``best`` option +- filter plugin - Add the count and mandatory_count parameters in the regex_replace filter +- find - add a encoding parameter to specify which encoding of the files to be searched. +- git module - gpg_allowlist name was added in 2.17 and we will eventually deprecate the gpg_whitelist alias. +- import_role - allow subdirectories with ``_from`` options for parity with ``include_role`` (https://github.com/ansible/ansible/issues/82584). +- module argument spec - Allow module authors to include arbitrary additional context in the argument spec, by making use of a new top level key called ``context``. This key should be a dict type. This allows for users to customize what they place in the argument spec, without having to ignore sanity tests that validate the schema. +- modules - Add the ability for an action plugin to call ``self._execute_module(*, ignore_unknown_opts=True)`` to execute a module with options that may not be supported for the version being called. This tells the module basic wrapper to ignore validating the options provided match the arg spec. +- package action now has a configuration that overrides the detected package manager, it is still overridden itself by the use option. +- py3compat - Remove ``ansible.utils.py3compat`` as it is no longer necessary +- removed the unused argument ``create_new_password`` from ``CLI.build_vault_ids`` (https://github.com/ansible/ansible/pull/82066). +- urls - Add support for TLS 1.3 post handshake certificate authentication - https://github.com/ansible/ansible/issues/81782 +- urls - reduce complexity of ``Request.open`` +- user - accept yescrypt hash as user password +- validate-modules tests now correctly handles ``choices`` in dictionary format. + +amazon.aws +~~~~~~~~~~ + +- AnsibeAWSModule - added ``fail_json_aws_error()`` as a wrapper for ``fail_json()`` and ``fail_json_aws()`` when passed an ``AnsibleAWSError`` exception (https://github.com/ansible-collections/amazon.aws/pull/1997). +- autoscaling_group - minor PEP8 whitespace sanity fixes (https://github.com/ansible-collections/amazon.aws/pull/1846). +- autoscaling_group - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- backup_plan - Let user to set ``schedule_expression_timezone`` for backup plan rules when when using botocore >= 1.31.36 (https://github.com/ansible-collections/amazon.aws/issues/1952). +- 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_ami_info - simplify parameters to ``get_image_attribute`` to only pass ID of image (https://github.com/ansible-collections/amazon.aws/pull/1846). +- ec2_eip - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) +- ec2_instance - Add support for modifying metadata options of an existing instance (https://github.com/ansible-collections/amazon.aws/pull/1918). +- ec2_instance - add support for AdditionalInfo option when creating an instance (https://github.com/ansible-collections/amazon.aws/pull/1828). +- ec2_instance - add support for ``host`` option in placement.tenancy (https://github.com/ansible-collections/amazon.aws/pull/2026). +- ec2_instance - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- ec2_security_group - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/pull/1844) +- 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). +- ec2_vpc_igw - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) +- ec2_vpc_route_table - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) +- ec2_vpc_subnet - the default value for ``tags`` has been changed from ``{}`` to ``None``, to remove tags from a subnet an empty map must be explicitly passed to the module (https://github.com/ansible-collections/amazon.aws/pull/1876). +- ec2_vpc_subnet - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) +- 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). +- elb_classic_lb - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- iam_access_key - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_access_key_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_group - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_group - ``group_name`` has been added as an alias to ``name`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_group - add support for setting group path (https://github.com/ansible-collections/amazon.aws/pull/1892). +- iam_group - adds attached_policies return value (https://github.com/ansible-collections/amazon.aws/pull/1892). +- iam_group - code refactored to avoid single long function (https://github.com/ansible-collections/amazon.aws/pull/1892). +- iam_group - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_instance_profile - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_instance_profile - attempting to change the ``path`` for an existing profile will now generate a warning, previously this was silently ignored (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_instance_profile - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_instance_profile - the ``prefix`` parameter has been renamed ``path`` for consistency with other IAM modules, ``prefix`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_instance_profile - the default value for ``path`` has been removed. New instances will still be created with a default path of ``/``. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_instance_profile_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_managed_policy - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_managed_policy - ``description`` attempting to update the description now results in a warning, previously it was simply ignored (https://github.com/ansible-collections/amazon.aws/pull/1936). +- iam_managed_policy - ``policy`` is no longer a required parameter (https://github.com/ansible-collections/amazon.aws/pull/1936). +- iam_managed_policy - added support for tagging managed policies (https://github.com/ansible-collections/amazon.aws/pull/1936). +- iam_managed_policy - more consistently perform retries on rate limiting errors (https://github.com/ansible-collections/amazon.aws/pull/1936). +- iam_managed_policy - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_managed_policy - support for setting ``path`` (https://github.com/ansible-collections/amazon.aws/pull/1936). +- iam_managed_policy - the ``policy_description`` parameter has been renamed ``description`` for consistency with other IAM modules, ``policy_description`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_managed_policy - the ``policy_name`` parameter has been renamed ``name`` for consistency with other IAM modules, ``policy_name`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_mfa_device_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_role - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_role - ``prefix`` and ``path_prefix`` have been added as aliases to ``path`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_role - ``role_name`` has been added as an alias to ``name`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_role - attempting to change the ``path`` for an existing profile will now generate a warning, previously this was silently ignored (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_role - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_role - the default value for ``path`` has been removed. New roles will still be created with a default path of ``/``. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_role_info - ``path`` and ``prefix`` have been added as aliases to ``path_prefix`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_role_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_user - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_user - ``user_name`` has been added as an alias to ``name`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_user - add ``boundary`` parameter to support managing boundary policy on users (https://github.com/ansible-collections/amazon.aws/pull/1912). +- iam_user - add ``path`` parameter to support managing user path (https://github.com/ansible-collections/amazon.aws/pull/1912). +- iam_user - added ``attached_policies`` to return value (https://github.com/ansible-collections/amazon.aws/pull/1912). +- iam_user - refactored code to reduce complexity (https://github.com/ansible-collections/amazon.aws/pull/1912). +- iam_user - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_user - refactored error handling to use a decorator (https://github.com/ansible-collections/amazon.aws/pull/1951). +- iam_user_info - Add ``login_profile`` to return info that is get from a user, to know if they can login from AWS console (https://github.com/ansible-collections/amazon.aws/pull/2012). +- iam_user_info - ``prefix`` has been added as an alias to ``path_prefix`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). +- iam_user_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). +- iam_user_info - the ``path`` parameter has been renamed ``path_prefix`` for consistency with other IAM modules, ``path`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). +- kms_key - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- lambda - added support for using ECR images for the function (https://github.com/ansible-collections/amazon.aws/pull/1939). +- 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.errors - added a basic error handler decorator (https://github.com/ansible-collections/amazon.aws/pull/1951). +- module_utils.iam - refactored normalization functions to use ``boto3_resource_to_ansible_dict()`` and ``boto3_resource_list_to_ansible_dict()`` (https://github.com/ansible-collections/amazon.aws/pull/2006). +- module_utils.transformations - add ``boto3_resource_to_ansible_dict()`` and ``boto3_resource_list_to_ansible_dict()`` helpers (https://github.com/ansible-collections/amazon.aws/pull/2006). +- 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_cluster - Add support for ServerlessV2ScalingConfiguration to create and modify cluster operations (https://github.com/ansible-collections/amazon.aws/pull/1839). +- 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). +- rds_instance_snapshot - minor PEP8 whitespace sanity fixes (https://github.com/ansible-collections/amazon.aws/pull/1846). +- s3_bucket - refactor s3_bucket module code for improved readability and maintainability (https://github.com/ansible-collections/amazon.aws/pull/2057). +- s3_bucket_info - add parameter ``bucket_versioning`` to return the versioning state of a bucket (https://github.com/ansible-collections/amazon.aws/pull/1919). +- s3_object - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- s3_object_info - fix exception raised when listing objects from empty bucket (https://github.com/ansible-collections/amazon.aws/pull/1919). + +ansible.netcommon +~~~~~~~~~~~~~~~~~ + +- Add new module cli_restore that exclusively handles restoring of backup configuration to target applaince. + +ansible.utils +~~~~~~~~~~~~~ + +- Add support in fact_diff filter plugin to show common lines.(https://github.com/ansible-collections/ansible.utils/issues/311) +- Fact_diff filter plugin - Add fact_diff filter plugin. (https://github.com/ansible-collections/ansible.utils/issues/78). + +ansible.windows +~~~~~~~~~~~~~~~ + +- Set minimum supported Ansible version to 2.14 to align with the versions still supported by Ansible. +- win_share - Added a new param called ``scope_name`` that allows file shares to be scoped for Windows Server failover cluster roles. +- win_uri - Max depth for json object conversion used to be 2. Can now send json objects with up to 20 levels of nesting + +arista.eos +~~~~~~~~~~ + +- 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. + +check_point.mgmt +~~~~~~~~~~~~~~~~ + +- New resource modules for R81.20 JHF Take 43 +- meta/runtime.yml - update minimum Ansible version required to 2.14.0. + +cisco.aci +~~~~~~~~~ + +- Add Authentification option for EIGRP interface profile. +- Add L3out Floating SVI modules (aci_l3out_floating_svi, aci_l3out_floating_svi_path, aci_l3out_floating_svi_path_secondary_ip and aci_l3out_floating_svi_secondary_ip) (#478) +- Add No-verification flag option to reduce the number of API calls. If true, a verifying GET will not be sent after a POST update to APIC +- Add access spine interface selector and port block binding in aci_access_port_block_to_access_port +- Add aci_access_spine_interface_selector module +- Add aci_action_rule_additional_communities module +- Add aci_action_rule_set_as_path and aci_action_rule_set_as_path_asn modules +- Add aci_bgp_peer_prefix_policy, aci_bgp_route_summarization_policy and aci_bgp_address_family_context_policy modules +- Add aci_fabric_pod, aci_fabric_pod_external_tep, aci_fabric_pod_profile, aci_fabric_pod_remote_pool modules (#558) +- Add aci_hsrp_interface_policy, aci_l3out_hsrp_group, aci_l3out_hsrp_interface_profile and aci_l3out_hsrp_secondary_vip modules (#505) +- Add aci_interface_policy_eigrp (class:eigrpIfPol) module +- Add aci_interface_policy_pim module +- Add aci_interface_policy_storm_control module +- Add aci_keychain_policy and aci_key_policy modules +- Add aci_l3out_bfd_multihop_interface_profile, aci_l3out_bfd_interface_profile, aci_interface_policy_bfd_multihop, aci_interface_policy_bfd and aci_bfd_multihop_node_policy modules (#492) +- Add aci_l3out_dhcp_relay_label, aci_dhcp_option_policy and aci_dhcp_option modules +- Add aci_l3out_eigrp_interface_profile module +- Add aci_listify filter plugin to flattens nested dictionaries +- Add aci_netflow_exporter_policy module +- Add aci_netflow_monitor_policy and aci_netflow_record_policy modules +- Add aci_netflow_monitor_to_exporter module +- Add aci_node_block module +- Add aci_pim_route_map_policy and aci_pim_route_map_entry modules +- Add aci_qos_custom_policy and aci_qos_dscp_class modules +- Add aci_qos_dot1p_class module +- Add action rules attributes to aci_tenant_action_rule_profile. +- Add auto to speed attribute options in aci_interface_policy_link_level module (#577) +- Add missing options to aci_bd module +- Add modules aci_bd_to_netflow_monitor_policy and aci_bd_rogue_exception_mac (#600) +- Add modules for Fabric External Connection Policies and its childs +- Add option to set delimiter to _ in aci_epg_to_domain module +- Add qos_custom_policy, pim_interface_policy and igmp_interface_policy as new child_classes for aci_l3out_logical_interface_profile. +- Add support for annotation in aci_rest module (#437) +- Add support for block statements in useg attributes with the aci_epg_useg_attribute_block_statement module +- Add support for configuration of access switch policy groups with aci_access_switch_policy_group module +- Add support for configuration of certificate authorities in aci_aaa_certificate_authority +- Add support for configuration of fabric management access policies in aci_fabric_management_access +- Add support for configuration of vrf multicast with aci_vrf_multicast module +- Add support for configuring Azure cloud subnets using the aci_cloud_subnet module +- Add support for encap scope in aci_l3out_interface +- Add support for https ssl cipher configuration in aci_fabric_management_access_https_cipher +- Add support for infra l3out nodes bgp-evpn loopback, mpls transport loopback and segment id in aci_l3out_logical_node +- Add support for infra sr mpls micro bfd in aci_l3out_interface +- Add support for intra epg, taboo, and contract interface in aci_epg_to_contract +- Add support for key ring configuration in aci_aaa_key_ring +- Add support for mac and description in aci_l3out_interface +- Add support for mpls custom qos policy for infra sr mpls l3outs node profiles in aci_l3out_logical_node_profile +- Add support for security default settings configuration in aci_aaa_security_default_settings +- Add support for simple statements in useg attributes with the aci_epg_useg_attribute_simple_statement module +- Add support for sr-mpls bgpInfraPeerP and bgp_password in aci_l3out_bgp_peer module (#543) +- Add support for sr-mpls in aci_l3out module +- Add support for sr-mpls l3out to infra l3out in aci_l3out_to_sr_mpls_infra_l3out +- Add support for subject labels for EPG, EPG Contract, ESG, Contract Subject, L2Out External EPG, L3out External EPG, and L3out External EPG Contract with the aci_subject_label module +- Add support for taboo contract, contract interface and intra_epg contract in aci_l3out_extepg_to_contract +- Add support for useg default block statement configuration for useg epg in aci_epg +- Modify child class node block conditions to be optional in aci_switch_leaf_selector + +cisco.dnac +~~~~~~~~~~ + +- Added a method to validate IP addresses. +- Added attributes 'dnac_api_task_timeout' and 'dnac_task_poll_interval' in intent and workflow_manager modules. +- Added the op_modifies=True when calling SDK APIs in the workflow manager modules. +- Adding support to importing a template using JSON file +- Addressed image un-tagging issues in inherited site settings. +- Changes in discovery workflow manager modules relating to different states of the discovery job +- Changes in inventory and swim workflow manager modules. +- Changes the minimum supported version from Ansible v2.9.10 to v2.14.0 +- Corrected site creation issues in the site module when optional parameters are missing. +- Fixed a minor issue in the site workflow manager module. +- Fixed management IP updates for devices on SNMP version v2. +- Introduced sample playbooks for the discovery module. +- Provided documentation for EWLC templates in Cisco Catalyst Center version 2.3.7.x. +- Resolved a 'NoneType' error in discovery module credentials. +- Updating galaxy.yml ansible.utils dependencies. +- inventory_workflow_manager - Added attributes 'add_user_defined_field', 'update_interface_details', 'export_device_list' and 'admin_status' +- inventory_workflow_manager - Removed attributes 'provision_wireless_device', 'reprovision_wired_device' + +cisco.ios +~~~~~~~~~ + +- Add support for cli_restore functionality. +- Added ios_evpn_evi resource module. +- Added ios_evpn_global resource module. +- Added ios_vxlan_vtep resource module. +- Fixed ios_evpn_evi resource module integration test failure - code to remove VLAN config. +- 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. +- ios_bgp_address_family - Fixed an issue with inherit peer-policy CLI +- ios_bgp_address_family - added 'advertise' key +- 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. +- ios_vlans - added vlan config CLI feature. +- ios_vrf - added MDT related keys + +cisco.iosxr +~~~~~~~~~~~ + +- Add missing options in afi and safi in address-family of bgp_templates RM. +- 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. +- iosxr_facts - Add cdp neighbors in ansible_net_neighbors dictionary (https://github.com/ansible-collections/cisco.iosxr/pull/457). + +cisco.ise +~~~~~~~~~ + +- Changes the minimum supported version from Ansible v2.9.10 to v2.14.0 +- Services included configuration, edda, dataconnect_services, subscriber. +- cisco.ise collection now supports ansible.utils v3 + +cisco.meraki +~~~~~~~~~~~~ + +- Adding support to ansible.utils ">=2.0.0, <4.00". +- Ansible collection now support v1.44.1 of Dashboard Api. +- Fixing problem of naming in `organizations_appliance_vpn_third_party_vpnpeers_info`. +- Removing `state` from allowed parameters for `networks_syslog_servers` module. +- The `id` parameter is change type to an `integer` in `networks_appliance_vlans` module. +- The `id` parameter is now required for `networks_appliance_vlans` module. +- administered_licensing_subscription_entitlements_info - new plugin. +- administered_licensing_subscription_subscriptions_bind - new plugin. +- administered_licensing_subscription_subscriptions_claim - new plugin. +- administered_licensing_subscription_subscriptions_claim_key_validate - new plugin. +- administered_licensing_subscription_subscriptions_compliance_statuses_info - new plugin. +- administered_licensing_subscription_subscriptions_info - new plugin. +- devices_appliance_radio_settings - new plugin. +- devices_appliance_radio_settings_info - new plugin. +- devices_live_tools_arp_table - new plugin. +- devices_live_tools_arp_table_info - new plugin. +- devices_live_tools_cable_test - new plugin. +- devices_live_tools_cable_test_info - new plugin. +- devices_live_tools_throughput_test - new plugin. +- devices_live_tools_throughput_test_info - new plugin. +- devices_live_tools_wake_on_lan - new plugin. +- devices_live_tools_wake_on_lan_info - new plugin. +- devices_wireless_alternate_management_interface_ipv6 - new plugin. +- networks_appliance_rf_profiles - new plugin. +- networks_appliance_rf_profiles_info - new plugin. +- networks_appliance_traffic_shaping_vpn_exclusions - new plugin. +- networks_sm_devices_install_apps - new plugin. +- networks_sm_devices_reboot - new plugin. +- networks_sm_devices_shutdown - new plugin. +- networks_sm_devices_uninstall_apps - new plugin. +- networks_vlan_profiles - new plugin. +- networks_vlan_profiles_assignments_by_device_info - new plugin. +- networks_vlan_profiles_assignments_reassign - new plugin. +- networks_vlan_profiles_info - new plugin. +- networks_wireless_ethernet_ports_profiles - new plugin. +- networks_wireless_ethernet_ports_profiles_assign - new plugin. +- networks_wireless_ethernet_ports_profiles_info - new plugin. +- networks_wireless_ethernet_ports_profiles_set_default - new plugin. +- organizations_appliance_traffic_shaping_vpn_exclusions_by_network_info - new plugin. +- organizations_appliance_uplinks_statuses_overview_info - new plugin. +- organizations_appliance_uplinks_usage_by_network_info - new plugin. +- organizations_camera_boundaries_areas_by_device_info - new plugin. +- organizations_camera_boundaries_lines_by_device_info - new plugin. +- organizations_camera_detections_history_by_boundary_by_interval_info - new plugin. +- organizations_camera_permissions_info - new plugin. +- organizations_camera_roles - new plugin. +- organizations_camera_roles_info - new plugin. +- organizations_devices_availabilities_change_history_info - new plugin. +- organizations_devices_boots_history_info - new plugin. +- organizations_sm_admins_roles - new plugin. +- organizations_sm_admins_roles_info - new plugin. +- organizations_sm_sentry_policies_assignments - new plugin. +- organizations_sm_sentry_policies_assignments_by_network_info - new plugin. +- organizations_summary_top_networks_by_status_info - new plugin. +- organizations_webhooks_callbacks_statuses_info - new plugin. +- organizations_wireless_devices_channel_utilization_by_device_info - new plugin. +- organizations_wireless_devices_channel_utilization_by_network_info - new plugin. +- organizations_wireless_devices_channel_utilization_history_by_device_by_interval_info - new plugin. +- 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. + +cisco.mso +~~~~~~~~~ + +- Add Azure Cloud site support to mso_schema_site_contract_service_graph +- Add Azure Cloud site support to mso_schema_site_service_graph +- Add functionality to resolve same name in remote and local user. +- Add l3out_template and l3out_schema arguments to mso_schema_site_external_epg (#394) +- Add mso_schema_site_contract_service_graph module to manage site contract service graph +- Add mso_schema_site_contract_service_graph_listener module to manage Azure site contract service graph listeners and update other modules +- Add new parameter remote_user to add multiple remote users associated with multiple login domains +- Add support for replacing all existing contracts with new provided contracts in a single operation with one request and adding/removing multiple contracts in multiple operations with a single request in mso_schema_template_anp_epg_contract module +- Add support for replacing all existing static ports with new provided static ports in a single operation with one request and adding/removing multiple static ports in multiple operations with a single request in mso_schema_template_anp_epg_staticport module +- Add support for required attributes introduced in NDO 4.2 for mso_schema_site_anp_epg_domain +- Support for creation of schemas without templates with the mso_schema module + +cisco.nxos +~~~~~~~~~~ + +- 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. +- nxos_config - Relax restrictions on I(src) parameter so it can be used more like I(lines). (https://github.com/ansible-collections/cisco.nxos/issues/89). + +community.aws +~~~~~~~~~~~~~ + +- 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). +- aws_ssm - Updated the documentation to explicitly state that an S3 bucket is required, the behavior of the files in that bucket, and requirements around that. (https://github.com/ansible-collections/community.aws/issues/1775). +- cloudfront_distribution - added support for ``cache_policy_id`` and ``origin_request_policy_id`` for behaviors (https://github.com/ansible-collections/community.aws/pull/1589) +- 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 (). +- glue_job - add support for 2 new instance types which are G.4X and G.8X (https://github.com/ansible-collections/community.aws/pull/2048). +- mq_broker - add support to wait for broker state via ``wait`` and ``wait_timeout`` parameter values (https://github.com/ansible-collections/community.aws/pull/1879). +- msk_cluster - Support for additional ``m5`` and ``m7g`` types of MSK clusters (https://github.com/ansible-collections/community.aws/pull/1947). + +community.ciscosmb +~~~~~~~~~~~~~~~~~~ + +- added additional attribute - add interface 'bandwidth' attribute +- docs - addeed info about SG-250 support and testing +- reverted attribute change - keep interface 'bandwith' attribute + +community.crypto +~~~~~~~~~~~~~~~~ + +- When using cryptography >= 42.0.0, use offset-aware ``datetime.datetime`` objects (with timezone UTC) instead of offset-naive UTC timestamps (https://github.com/ansible-collections/community.crypto/issues/726, https://github.com/ansible-collections/community.crypto/pull/727). +- acme_certificate - add ``include_renewal_cert_id`` option to allow requesting renewal of a specific certificate according to the current ACME Renewal Information specification draft (https://github.com/ansible-collections/community.crypto/pull/739). +- luks_device - add allow discards option (https://github.com/ansible-collections/community.crypto/pull/693). +- openssh_cert - avoid UTC functions deprecated in Python 3.12 when using Python 3 (https://github.com/ansible-collections/community.crypto/pull/727). +- x509_crl - the new option ``serial_numbers`` allow to configure in which format serial numbers can be provided to ``revoked_certificates[].serial_number``. The default is as integers (``serial_numbers=integer``) for backwards compatibility; setting ``serial_numbers=hex-octets`` allows to specify colon-separated hex octet strings like ``00:11:22:FF`` (https://github.com/ansible-collections/community.crypto/issues/687, https://github.com/ansible-collections/community.crypto/pull/715). + +community.digitalocean +~~~~~~~~~~~~~~~~~~~~~~ + +- digital_ocean_kubernetes - add project_name parameter (https://github.com/ansible-collections/community.digitalocean/issues/264). +- fix sanity tests (https://github.com/ansible-collections/community.digitalocean/issues/323). + +community.dns +~~~~~~~~~~~~~ + +- hetzner_dns_records and hosttech_dns_records inventory plugins - the ``filters`` option has been renamed to ``simple_filters``. The old name still works until community.hrobot 2.0.0. Then it will change to allow more complex filtering with the ``community.library_inventory_filtering_v1`` collection's functionality (https://github.com/ansible-collections/community.dns/pull/181). +- inventory plugins - add ``filter`` option which allows to include and exclude hosts based on Jinja2 conditions (https://github.com/ansible-collections/community.dns/pull/196). +- lookup, lookup_as_dict - it is now possible to configure whether the input should be treated as an absolute domain name (``search=false``), or potentially as a relative domain name (``search=true``) (https://github.com/ansible-collections/community.dns/issues/200, https://github.com/ansible-collections/community.dns/pull/201). +- nameserver_info and nameserver_record_info - add ``server`` parameter to specify custom DNS servers (https://github.com/ansible-collections/community.dns/pull/168, https://github.com/ansible-collections/community.dns/pull/178). +- wait_for_txt - add ``server`` parameter to specify custom DNS servers (https://github.com/ansible-collections/community.dns/pull/178). + +community.docker +~~~~~~~~~~~~~~~~ + +- The EE requirements now include PyYAML, since the ``docker_compose_v2*`` modules depend on it when the ``definition`` option is used. This should not have a noticable effect on generated EEs since ansible-core itself depends on PyYAML as well, and ansible-builder explicitly ignores this dependency (https://github.com/ansible-collections/community.docker/pull/832). +- The ``ca_cert`` option available to almost all modules and plugins has been renamed to ``ca_path``. The name ``ca_path`` is also used for similar options in ansible-core and other collections. The old name has been added as an alias and can still be used (https://github.com/ansible-collections/community.docker/pull/744). +- The ``docker_stack*`` modules now use the common CLI-based module code added for the ``docker_image_build`` and ``docker_compose_v2`` modules. This means that the modules now have various more configuration options with respect to talking to the Docker Daemon, and now also are part of the ``community.docker.docker`` and ``docker`` module default groups (https://github.com/ansible-collections/community.docker/pull/745). +- docker_compose_v2 - add ``scale`` option to allow to explicitly scale services (https://github.com/ansible-collections/community.docker/pull/776). +- docker_compose_v2 - allow to wait until containers are running/health when running ``docker compose up`` with the new ``wait`` option (https://github.com/ansible-collections/community.docker/issues/794, https://github.com/ansible-collections/community.docker/pull/796). +- docker_compose_v2* - the new option ``check_files_existing`` allows to disable the check for one of the files ``compose.yaml``, ``compose.yml``, ``docker-compose.yaml``, and ``docker-compose.yml`` in ``project_src`` if ``files`` is not specified. This is necessary if a non-standard compose filename is specified through other means, like the ``COMPOSE_FILE`` environment variable (https://github.com/ansible-collections/community.docker/issues/838, https://github.com/ansible-collections/community.docker/pull/839). +- docker_compose_v2* modules - allow to provide an inline definition of the compose content instead of having to provide a ``project_src`` directory with the compose file written into it (https://github.com/ansible-collections/community.docker/issues/829, https://github.com/ansible-collections/community.docker/pull/832). +- docker_compose_v2, docker_compose_v2_pull - support ``files`` parameter to specify multiple Compose files (https://github.com/ansible-collections/community.docker/issues/772, https://github.com/ansible-collections/community.docker/pull/775). +- docker_container - add ``networks[].mac_address`` option for Docker API 1.44+. Note that Docker API 1.44 no longer uses the global ``mac_address`` option, this new option is the only way to set the MAC address for a container (https://github.com/ansible-collections/community.docker/pull/763). +- docker_container - adds ``healthcheck.start_interval`` to support healthcheck start interval setting on containers (https://github.com/ansible-collections/community.docker/pull/848). +- docker_container - adds ``healthcheck.test_cli_compatible`` to allow omit test option on containers without remove existing image test (https://github.com/ansible-collections/community.docker/pull/847). +- docker_container - implement better ``platform`` string comparisons to improve idempotency (https://github.com/ansible-collections/community.docker/issues/654, https://github.com/ansible-collections/community.docker/pull/705). +- docker_container - internal refactorings which allow comparisons to use more information like details of the current image or the Docker host config (https://github.com/ansible-collections/community.docker/pull/713). +- docker_container - the ``pull_check_mode_behavior`` option now allows to control the module's behavior in check mode when ``pull=always`` (https://github.com/ansible-collections/community.docker/issues/792, https://github.com/ansible-collections/community.docker/pull/797). +- docker_container - the ``pull`` option now accepts the three values ``never``, ``missing_image`` (default), and ``never``, next to the previously valid values ``true`` (equivalent to ``always``) and ``false`` (equivalent to ``missing_image``). This allows the equivalent to ``--pull=never`` from the Docker command line (https://github.com/ansible-collections/community.docker/issues/783, https://github.com/ansible-collections/community.docker/pull/797). +- docker_image - allow to specify labels and ``/dev/shm`` size when building images (https://github.com/ansible-collections/community.docker/issues/726, https://github.com/ansible-collections/community.docker/pull/727). +- docker_image - allow to specify memory size and swap memory size in other units than bytes (https://github.com/ansible-collections/community.docker/pull/727). +- docker_image_build - add ``outputs`` option to allow configuring outputs for the build (https://github.com/ansible-collections/community.docker/pull/852). +- docker_image_build - add ``secrets`` option to allow passing secrets to the build (https://github.com/ansible-collections/community.docker/pull/852). +- docker_image_build - allow ``platform`` to be a list of platforms instead of only a single platform for multi-platform builds (https://github.com/ansible-collections/community.docker/pull/852). +- docker_network - adds ``config_only`` and ``config_from`` to support creating and using config only networks (https://github.com/ansible-collections/community.docker/issues/395). +- docker_prune - add new options ``builder_cache_all``, ``builder_cache_filters``, and ``builder_cache_keep_storage``, and a new return value ``builder_cache_caches_deleted`` for pruning build caches (https://github.com/ansible-collections/community.docker/issues/844, https://github.com/ansible-collections/community.docker/issues/845). +- docker_swarm_service - adds ``sysctls`` to support sysctl settings on swarm services (https://github.com/ansible-collections/community.docker/issues/190). +- inventory plugins - add ``filter`` option which allows to include and exclude hosts based on Jinja2 conditions (https://github.com/ansible-collections/community.docker/pull/698, https://github.com/ansible-collections/community.docker/issues/610). +- vendored Docker SDK for Python - remove unused code that relies on functionality deprecated in Python 3.12 (https://github.com/ansible-collections/community.docker/pull/834). + +community.general +~~~~~~~~~~~~~~~~~ + +- PythonRunner module utils - specialisation of ``CmdRunner`` to execute Python scripts (https://github.com/ansible-collections/community.general/pull/8289). +- Use offset-aware ``datetime.datetime`` objects (with timezone UTC) instead of offset-naive UTC timestamps, which are deprecated in Python 3.12 (https://github.com/ansible-collections/community.general/pull/8222). +- aix_lvol - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- ansible_galaxy_install - minor refactor in the module (https://github.com/ansible-collections/community.general/pull/8413). +- apt_rpm - add new states ``latest`` and ``present_not_latest``. The value ``latest`` is equivalent to the current behavior of ``present``, which will upgrade a package if a newer version exists. ``present_not_latest`` does what most users would expect ``present`` to do: it does not upgrade if the package is already installed. The current behavior of ``present`` will be deprecated in a later version, and eventually changed to that of ``present_not_latest`` (https://github.com/ansible-collections/community.general/issues/8217, https://github.com/ansible-collections/community.general/pull/8247). +- apt_rpm - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- bitwarden lookup plugin - add ``bw_session`` option, to pass session key instead of reading from env (https://github.com/ansible-collections/community.general/pull/7994). +- bitwarden lookup plugin - add support to filter by organization ID (https://github.com/ansible-collections/community.general/pull/8188). +- bitwarden lookup plugin - allows to fetch all records of a given collection ID, by allowing to pass an empty value for ``search_value`` when ``collection_id`` is provided (https://github.com/ansible-collections/community.general/pull/8013). +- bitwarden lookup plugin - when looking for items using an item ID, the item is now accessed directly with ``bw get item`` instead of searching through all items. This doubles the lookup speed (https://github.com/ansible-collections/community.general/pull/7468). +- btrfs_subvolume - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- cmd_runner module_utils - add validation for minimum and maximum length in the value passed to ``cmd_runner_fmt.as_list()`` (https://github.com/ansible-collections/community.general/pull/8288). +- consul_auth_method, consul_binding_rule, consul_policy, consul_role, consul_session, consul_token - added action group ``community.general.consul`` (https://github.com/ansible-collections/community.general/pull/7897). +- consul_policy - added support for diff and check mode (https://github.com/ansible-collections/community.general/pull/7878). +- consul_policy, consul_role, consul_session - removed dependency on ``requests`` and factored out common parts (https://github.com/ansible-collections/community.general/pull/7826, https://github.com/ansible-collections/community.general/pull/7878). +- consul_role - ``node_identities`` now expects a ``node_name`` option to match the Consul API, the old ``name`` is still supported as alias (https://github.com/ansible-collections/community.general/pull/7878). +- consul_role - ``service_identities`` now expects a ``service_name`` option to match the Consul API, the old ``name`` is still supported as alias (https://github.com/ansible-collections/community.general/pull/7878). +- consul_role - added support for diff mode (https://github.com/ansible-collections/community.general/pull/7878). +- consul_role - added support for templated policies (https://github.com/ansible-collections/community.general/pull/7878). +- elastic callback plugin - close elastic client to not leak resources (https://github.com/ansible-collections/community.general/pull/7517). +- filesystem - add bcachefs support (https://github.com/ansible-collections/community.general/pull/8126). +- gandi_livedns - adds support for personal access tokens (https://github.com/ansible-collections/community.general/issues/7639, https://github.com/ansible-collections/community.general/pull/8337). +- gconftool2 - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226). +- git_config - allow multiple git configs for the same name with the new ``add_mode`` option (https://github.com/ansible-collections/community.general/pull/7260). +- git_config - the ``after`` and ``before`` fields in the ``diff`` of the return value can be a list instead of a string in case more configs with the same key are affected (https://github.com/ansible-collections/community.general/pull/7260). +- git_config - when a value is unset, all configs with the same key are unset (https://github.com/ansible-collections/community.general/pull/7260). +- gitlab modules - add ``ca_path`` option (https://github.com/ansible-collections/community.general/pull/7472). +- gitlab modules - remove duplicate ``gitlab`` package check (https://github.com/ansible-collections/community.general/pull/7486). +- gitlab_deploy_key, gitlab_group_members, gitlab_group_variable, gitlab_hook, gitlab_instance_variable, gitlab_project_badge, gitlab_project_variable, gitlab_user - improve API pagination and compatibility with different versions of ``python-gitlab`` (https://github.com/ansible-collections/community.general/pull/7790). +- gitlab_hook - adds ``releases_events`` parameter for supporting Releases events triggers on GitLab hooks (https://github.com/ansible-collections/community.general/pull/7956). +- gitlab_runner - add support for new runner creation workflow (https://github.com/ansible-collections/community.general/pull/7199). +- homebrew - adds ``force_formula`` parameter to disambiguate a formula from a cask of the same name (https://github.com/ansible-collections/community.general/issues/8274). +- homebrew, homebrew_cask - refactor common argument validation logic into a dedicated ``homebrew`` module utils (https://github.com/ansible-collections/community.general/issues/8323, https://github.com/ansible-collections/community.general/pull/8324). +- icinga2 inventory plugin - add Jinja2 templating support to ``url``, ``user``, and ``password`` paramenters (https://github.com/ansible-collections/community.general/issues/7074, https://github.com/ansible-collections/community.general/pull/7996). +- icinga2 inventory plugin - adds new parameter ``group_by_hostgroups`` in order to make grouping by Icinga2 hostgroups optional (https://github.com/ansible-collections/community.general/pull/7998). +- ini_file - add an optional parameter ``section_has_values``. If the target ini file contains more than one ``section``, use ``section_has_values`` to specify which one should be updated (https://github.com/ansible-collections/community.general/pull/7505). +- ini_file - support optional spaces between section names and their surrounding brackets (https://github.com/ansible-collections/community.general/pull/8075). +- installp - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- ipa_config - adds ``passkey`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7588). +- ipa_dnsrecord - adds ability to manage NS record types (https://github.com/ansible-collections/community.general/pull/7737). +- ipa_pwpolicy - refactor module and exchange a sequence ``if`` statements with a ``for`` loop (https://github.com/ansible-collections/community.general/pull/7723). +- ipa_pwpolicy - update module to support ``maxrepeat``, ``maxsequence``, ``dictcheck``, ``usercheck``, ``gracelimit`` parameters in FreeIPA password policies (https://github.com/ansible-collections/community.general/pull/7723). +- ipa_sudorule - adds options to include denied commands or command groups (https://github.com/ansible-collections/community.general/pull/7415). +- ipa_user - adds ``idp`` and ``passkey`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7589). +- irc - add ``validate_certs`` option, and rename ``use_ssl`` to ``use_tls``, while keeping ``use_ssl`` as an alias. The default value for ``validate_certs`` is ``false`` for backwards compatibility. We recommend to every user of this module to explicitly set ``use_tls=true`` and `validate_certs=true`` whenever possible, especially when communicating to IRC servers over the internet (https://github.com/ansible-collections/community.general/pull/7550). +- java_cert - add ``cert_content`` argument (https://github.com/ansible-collections/community.general/pull/8153). +- java_cert - enable ``owner``, ``group``, ``mode``, and other generic file arguments (https://github.com/ansible-collections/community.general/pull/8116). +- kernel_blacklist - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226). +- keycloak module utils - expose error message from Keycloak server for HTTP errors in some specific situations (https://github.com/ansible-collections/community.general/pull/7645). +- keycloak_client, keycloak_clientscope, keycloak_clienttemplate - added ``docker-v2`` protocol support, enhancing alignment with Keycloak's protocol options (https://github.com/ansible-collections/community.general/issues/8215, https://github.com/ansible-collections/community.general/pull/8216). +- keycloak_realm_key - the ``config.algorithm`` option now supports 8 additional key algorithms (https://github.com/ansible-collections/community.general/pull/7698). +- keycloak_realm_key - the ``config.certificate`` option value is no longer defined with ``no_log=True`` (https://github.com/ansible-collections/community.general/pull/7698). +- keycloak_realm_key - the ``provider_id`` option now supports RSA encryption key usage (value ``rsa-enc``) (https://github.com/ansible-collections/community.general/pull/7698). +- keycloak_user_federation - add option for ``krbPrincipalAttribute`` (https://github.com/ansible-collections/community.general/pull/7538). +- keycloak_user_federation - allow custom user storage providers to be set through ``provider_id`` (https://github.com/ansible-collections/community.general/pull/7789). +- ldap_attrs - module now supports diff mode, showing which attributes are changed within an operation (https://github.com/ansible-collections/community.general/pull/8073). +- lvg - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- lvol - change ``pvs`` argument type to list of strings (https://github.com/ansible-collections/community.general/pull/7676, https://github.com/ansible-collections/community.general/issues/7504). +- lvol - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- lxd connection plugin - tighten the detection logic for lxd ``Instance not found`` errors, to avoid false detection on unrelated errors such as ``/usr/bin/python3: not found`` (https://github.com/ansible-collections/community.general/pull/7521). +- lxd_container - uses ``/1.0/instances`` API endpoint, if available. Falls back to ``/1.0/containers`` or ``/1.0/virtual-machines``. Fixes issue when using Incus or LXD 5.19 due to migrating to ``/1.0/instances`` endpoint (https://github.com/ansible-collections/community.general/pull/7980). +- macports - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- mail - add ``Message-ID`` header; which is required by some mail servers (https://github.com/ansible-collections/community.general/pull/7740). +- mail module, mail callback plugin - allow to configure the domain name of the Message-ID header with a new ``message_id_domain`` option (https://github.com/ansible-collections/community.general/pull/7765). +- mssql_script - adds transactional (rollback/commit) support via optional boolean param ``transaction`` (https://github.com/ansible-collections/community.general/pull/7976). +- netcup_dns - adds support for record types ``OPENPGPKEY``, ``SMIMEA``, and ``SSHFP`` (https://github.com/ansible-collections/community.general/pull/7489). +- nmcli - add support for new connection type ``loopback`` (https://github.com/ansible-collections/community.general/issues/6572). +- nmcli - adds OpenvSwitch support with new ``type`` values ``ovs-port``, ``ovs-interface``, and ``ovs-bridge``, and new ``slave_type`` value ``ovs-port`` (https://github.com/ansible-collections/community.general/pull/8154). +- nmcli - allow for ``infiniband`` slaves of ``bond`` interface types (https://github.com/ansible-collections/community.general/pull/7569). +- nmcli - allow for the setting of ``MTU`` for ``infiniband`` and ``bond`` interface types (https://github.com/ansible-collections/community.general/pull/7499). +- nmcli - allow setting ``MTU`` for ``bond-slave`` interface types (https://github.com/ansible-collections/community.general/pull/8118). +- onepassword lookup plugin - support 1Password Connect with the opv2 client by setting the connect_host and connect_token parameters (https://github.com/ansible-collections/community.general/pull/7116). +- onepassword_raw lookup plugin - support 1Password Connect with the opv2 client by setting the connect_host and connect_token parameters (https://github.com/ansible-collections/community.general/pull/7116) +- opentelemetry - add support for HTTP trace_exporter and configures the behavior via ``OTEL_EXPORTER_OTLP_TRACES_PROTOCOL`` (https://github.com/ansible-collections/community.general/issues/7888, https://github.com/ansible-collections/community.general/pull/8321). +- opentelemetry - add support for exporting spans in a file via ``ANSIBLE_OPENTELEMETRY_STORE_SPANS_IN_FILE`` (https://github.com/ansible-collections/community.general/issues/7888, https://github.com/ansible-collections/community.general/pull/8363). +- opkg - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226). +- osx_defaults - add option ``check_types`` to enable changing the type of existing defaults on the fly (https://github.com/ansible-collections/community.general/pull/8173). +- parted - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- passwordstore - adds ``timestamp`` and ``preserve`` parameters to modify the stored password format (https://github.com/ansible-collections/community.general/pull/7426). +- passwordstore lookup - add ``missing_subkey`` parameter defining the behavior of the lookup when a passwordstore subkey is missing (https://github.com/ansible-collections/community.general/pull/8166). +- pipx - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226). +- pkg5 - add support for non-silent execution (https://github.com/ansible-collections/community.general/issues/8379, https://github.com/ansible-collections/community.general/pull/8382). +- pkgin - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- portage - adds the possibility to explicitely tell portage to write packages to world file (https://github.com/ansible-collections/community.general/issues/6226, https://github.com/ansible-collections/community.general/pull/8236). +- portinstall - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- proxmox - adds ``startup`` parameters to configure startup order, startup delay and shutdown delay (https://github.com/ansible-collections/community.general/pull/8038). +- proxmox - adds ``template`` value to the ``state`` parameter, allowing conversion of container to a template (https://github.com/ansible-collections/community.general/pull/7143). +- proxmox - adds ``update`` parameter, allowing update of an already existing containers configuration (https://github.com/ansible-collections/community.general/pull/7540). +- proxmox inventory plugin - adds an option to exclude nodes from the dynamic inventory generation. The new setting is optional, not using this option will behave as usual (https://github.com/ansible-collections/community.general/issues/6714, https://github.com/ansible-collections/community.general/pull/7461). +- proxmox* modules - there is now a ``community.general.proxmox`` module defaults group that can be used to set default options for all Proxmox modules (https://github.com/ansible-collections/community.general/pull/8334). +- proxmox_disk - add ability to manipulate CD-ROM drive (https://github.com/ansible-collections/community.general/pull/7495). +- proxmox_kvm - add parameter ``update_unsafe`` to avoid limitations when updating dangerous values (https://github.com/ansible-collections/community.general/pull/7843). +- proxmox_kvm - adds ``template`` value to the ``state`` parameter, allowing conversion of a VM to a template (https://github.com/ansible-collections/community.general/pull/7143). +- proxmox_kvm - adds``usb`` parameter for setting USB devices on proxmox KVM VMs (https://github.com/ansible-collections/community.general/pull/8199). +- proxmox_kvm - support the ``hookscript`` parameter (https://github.com/ansible-collections/community.general/issues/7600). +- proxmox_ostype - it is now possible to specify the ``ostype`` when creating an LXC container (https://github.com/ansible-collections/community.general/pull/7462). +- proxmox_vm_info - add ability to retrieve configuration info (https://github.com/ansible-collections/community.general/pull/7485). +- puppet - new feature to set ``--waitforlock`` option (https://github.com/ansible-collections/community.general/pull/8282). +- redfish_command - add command ``ResetToDefaults`` to reset manager to default state (https://github.com/ansible-collections/community.general/issues/8163). +- redfish_config - add command ``SetServiceIdentification`` to set service identification (https://github.com/ansible-collections/community.general/issues/7916). +- redfish_info - add boolean return value ``MultipartHttpPush`` to ``GetFirmwareUpdateCapabilities`` (https://github.com/ansible-collections/community.general/issues/8194, https://github.com/ansible-collections/community.general/pull/8195). +- redfish_info - add command ``GetServiceIdentification`` to get service identification (https://github.com/ansible-collections/community.general/issues/7882). +- redfish_info - adding the ``BootProgress`` property when getting ``Systems`` info (https://github.com/ansible-collections/community.general/pull/7626). +- revbitspss lookup plugin - removed a redundant unicode prefix. The prefix was not necessary for Python 3 and has been cleaned up to streamline the code (https://github.com/ansible-collections/community.general/pull/8087). +- rundeck module utils - allow to pass ``Content-Type`` to API requests (https://github.com/ansible-collections/community.general/pull/7684). +- slackpkg - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- ssh_config - adds ``controlmaster``, ``controlpath`` and ``controlpersist`` parameters (https://github.com/ansible-collections/community.general/pull/7456). +- ssh_config - allow ``accept-new`` as valid value for ``strict_host_key_checking`` (https://github.com/ansible-collections/community.general/pull/8257). +- ssh_config - new feature to set ``AddKeysToAgent`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7703). +- ssh_config - new feature to set ``IdentitiesOnly`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7704). +- sudoers - add support for the ``NOEXEC`` tag in sudoers rules (https://github.com/ansible-collections/community.general/pull/7983). +- svr4pkg - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- swdepot - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264). +- terraform - add support for ``diff_mode`` for terraform resource_changes (https://github.com/ansible-collections/community.general/pull/7896). +- terraform - fix ``diff_mode`` in state ``absent`` and when terraform ``resource_changes`` does not exist (https://github.com/ansible-collections/community.general/pull/7963). +- xcc_redfish_command - added support for raw POSTs (``command=PostResource`` in ``category=Raw``) without a specific action info (https://github.com/ansible-collections/community.general/pull/7746). +- xfconf - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226). +- xfconf_info - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226). + +community.grafana +~~~~~~~~~~~~~~~~~ + +- Add Quickwit search engine datasource (https://quickwit.io). +- Add new module `grafana_silence` to create and delete silences through the API +- Add parameter `org_name` to `grafana_dashboard` +- Add parameter `org_name` to `grafana_datasource` +- Add parameter `org_name` to `grafana_organization_user` +- Add role components for `grafana_silence` module +- Add support for Grafana Tempo datasource type (https://grafana.com/docs/grafana/latest/datasources/tempo/) +- Manage `grafana_folder` for organizations +- Merged ansible role telekom-mms/ansible-role-grafana into ansible-collections/community.grafana +- added `community.grafana.notification_channel` to role +- default to true/false in docs and code +- grafana_dashboard - add check_mode support +- lookup - grafana_dashboards - add `validate_certs` and `ca_path` options to plugin for custom certs validation + +community.hashi_vault +~~~~~~~~~~~~~~~~~~~~~ + +- cert auth - add option to set the ``cert_auth_public_key`` and ``cert_auth_private_key`` parameters using the variables ``ansible_hashi_vault_cert_auth_public_key`` and ``ansible_hashi_vault_cert_auth_private_key`` (https://github.com/ansible-collections/community.hashi_vault/issues/428). + +community.hrobot +~~~~~~~~~~~~~~~~ + +- robot inventory plugin - add ``filter`` option which allows to include and exclude hosts based on Jinja2 conditions (https://github.com/ansible-collections/community.hrobot/pull/101). +- robot inventory plugin - the ``filters`` option has been renamed to ``simple_filters``. The old name still works until community.hrobot 2.0.0. Then it will change to allow more complex filtering with the ``community.library_inventory_filtering_v1`` collection's functionality (https://github.com/ansible-collections/community.hrobot/pull/94). + +community.mysql +~~~~~~~~~~~~~~~ + +- mysql_user - add the ``password_expire`` and ``password_expire_interval`` arguments to implement the password expiration management for mysql user (https://github.com/ansible-collections/community.mysql/pull/598). +- mysql_user - add user attribute support via the ``attributes`` parameter and return value (https://github.com/ansible-collections/community.mysql/pull/604). + +community.postgresql +~~~~~~~~~~~~~~~~~~~~ + +- postgresql_db - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/614). +- postgresql_db - add the ``icu_locale`` argument (https://github.com/ansible-collections/community.postgresql/issues/666). +- postgresql_db - add the ``locale_provider`` argument (https://github.com/ansible-collections/community.postgresql/issues/666). +- postgresql_ext - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). +- postgresql_publication - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). +- postgresql_schema - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). +- postgresql_subscription - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). +- postgresql_tablespace - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). + +community.rabbitmq +~~~~~~~~~~~~~~~~~~ + +- rabbitmq_user - add support to user manipulation through RabbitMQ API (https://github.com/ansible-collections/community.rabbitmq/issues/76) + +community.routeros +~~~~~~~~~~~~~~~~~~ + +- api_info, api_modify - Add RouterOS 7.x support to ``/mpls ldp`` path (https://github.com/ansible-collections/community.routeros/pull/271). +- api_info, api_modify - add ``/ip route rule`` path for RouterOS 6.x (https://github.com/ansible-collections/community.routeros/pull/278). +- api_info, api_modify - add ``/routing filter`` path for RouterOS 6.x (https://github.com/ansible-collections/community.routeros/pull/279). +- api_info, api_modify - add ``interface ovpn-client`` path (https://github.com/ansible-collections/community.routeros/issues/242, https://github.com/ansible-collections/community.routeros/pull/244). +- api_info, api_modify - add ``radius`` path (https://github.com/ansible-collections/community.routeros/issues/241, https://github.com/ansible-collections/community.routeros/pull/245). +- api_info, api_modify - add ``routing rule`` path (https://github.com/ansible-collections/community.routeros/issues/162, https://github.com/ansible-collections/community.routeros/pull/246). +- api_info, api_modify - add default value for ``from-pool`` field in ``/ipv6 address`` (https://github.com/ansible-collections/community.routeros/pull/270). +- api_info, api_modify - add missing DoH parameters ``doh-max-concurrent-queries``, ``doh-max-server-connections``, and ``doh-timeout`` to the ``ip dns`` path (https://github.com/ansible-collections/community.routeros/issues/230, https://github.com/ansible-collections/community.routeros/pull/235) +- api_info, api_modify - add missing parameters ``address-list``, ``address-list-timeout``, ``randomise-ports``, and ``realm`` to subpaths of the ``ip firewall`` path (https://github.com/ansible-collections/community.routeros/issues/236, https://github.com/ansible-collections/community.routeros/pull/237). +- api_info, api_modify - add missing path ``/interface pppoe-server server`` (https://github.com/ansible-collections/community.routeros/pull/273). +- api_info, api_modify - add missing path ``/ip dhcp-relay`` (https://github.com/ansible-collections/community.routeros/pull/276). +- api_info, api_modify - add missing path ``/queue simple`` (https://github.com/ansible-collections/community.routeros/pull/269). +- api_info, api_modify - add missing path ``/queue type`` (https://github.com/ansible-collections/community.routeros/pull/274). +- api_info, api_modify - add missing path ``routing bgp template`` (https://github.com/ansible-collections/community.routeros/pull/243). +- api_info, api_modify - add missing paths ``/routing bgp aggregate``, ``/routing bgp network`` and ``/routing bgp peer`` (https://github.com/ansible-collections/community.routeros/pull/277). +- api_info, api_modify - add read-only fields ``installed-version``, ``latest-version`` and ``status`` in ``system package update`` (https://github.com/ansible-collections/community.routeros/pull/263). +- api_info, api_modify - add support for paths ``/mpls interface``, ``/mpls ldp accept-filter``, ``/mpls ldp advertise-filter`` and ``mpls ldp interface`` (https://github.com/ansible-collections/community.routeros/pull/272). +- api_info, api_modify - add support for the ``tx-power`` attribute in ``interface wireless`` (https://github.com/ansible-collections/community.routeros/pull/239). +- api_info, api_modify - added support for ``interface wifi`` and its sub-paths (https://github.com/ansible-collections/community.routeros/pull/266). +- api_info, api_modify - make path ``user group`` modifiable and add ``comment`` attribute (https://github.com/ansible-collections/community.routeros/issues/256, https://github.com/ansible-collections/community.routeros/pull/257). +- api_info, api_modify - mark the ``interface wireless`` parameter ``running`` as read-only (https://github.com/ansible-collections/community.routeros/pull/233). +- api_info, api_modify - remove default value for read-only ``running`` field in ``interface wireless`` (https://github.com/ansible-collections/community.routeros/pull/264). +- api_info, api_modify - removed ``host`` primary key in ``tool netwatch`` path (https://github.com/ansible-collections/community.routeros/pull/248). +- api_info, api_modify - set the default value to ``false`` for the ``disabled`` parameter in some more paths where it can be seen in the documentation (https://github.com/ansible-collections/community.routeros/pull/237). +- api_modify - add missing ``comment`` attribute to ``/routing id`` (https://github.com/ansible-collections/community.routeros/pull/234). +- api_modify - add missing attributes to the ``routing bgp connection`` path (https://github.com/ansible-collections/community.routeros/pull/234). +- api_modify - add versioning to the ``/tool e-mail`` path (RouterOS 7.12 release) (https://github.com/ansible-collections/community.routeros/pull/234). +- api_modify - make ``/ip traffic-flow target`` a multiple value attribute (https://github.com/ansible-collections/community.routeros/pull/234). +- api_modify, api_info - add support for the ``ip vrf`` path in RouterOS 7 (https://github.com/ansible-collections/community.routeros/pull/259) +- api_modify, api_info - added support for ``interface wifiwave2`` (https://github.com/ansible-collections/community.routeros/pull/226). + +community.vmware +~~~~~~~~~~~~~~~~ + +- Add standard function vmware_argument_spec() from module_utils for using default env fallback function. https://github.com/ansible-collections/community.vmware/issues/1977 +- Document that all parameters and VMware object names are case sensitive (https://github.com/ansible-collections/community.vmware/issues/2019). +- Drop the outdated (and actually unmaintained) scenario guides (https://github.com/ansible-collections/community.vmware/pull/2022). +- vmware_dvs_portgroup - Make `state` default to `present` instead of having it as a required parameter (https://github.com/ansible-collections/community.vmware/pull/2055). +- vmware_dvswitch - Add switchIpAddress/switch_ip parameter for netflow config +- vmware_first_class_disk_info - Add a module to gather informations about first class disks. (https://github.com/ansible-collections/community.vmware/pull/1996). (https://github.com/ansible-collections/community.vmware/issues/1988). +- vmware_guest - Add IPv6 support for VM network interfaces (https://github.com/ansible-collections/community.vmware/pull/1937). +- vmware_guest_sendkey - Add Windows key (https://github.com/ansible-collections/community.vmware/issues/1959). +- vmware_guest_tools_info - Use `toolsVersionStatus2` instead of `toolsVersionStatus` (https://github.com/ansible-collections/community.vmware/issues/2033). +- vmware_guest_tools_upgrade - Add parameter `installer_options` to pass command line options to the installer to modify the installation procedure for tools (https://github.com/ansible-collections/community.vmware/pull/1059). +- vmware_host_facts - Add the possibility to get the related datacenter. (https://github.com/ansible-collections/community.vmware/pull/1994). +- vmware_vm_inventory - Add parameter `subproperties` (https://github.com/ansible-collections/community.vmware/pull/1972). +- vmware_vmkernel - Add the function to set the enable_backup_nfc setting (https://github.com/ansible-collections/community.vmware/pull/1978) +- vsphere_copy - Add parameter to tell vsphere_copy which diskformat is being uploaded (https://github.com/ansible-collections/community.vmware/pull/1995). + +community.windows +~~~~~~~~~~~~~~~~~ + +- Set minimum supported Ansible version to 2.14 to align with the versions still supported by Ansible. +- win_regmerge - Add content 'content' parameter for specifying registry file contents directly + +community.zabbix +~~~~~~~~~~~~~~~~ + +- Add slash at the end of the location directives, to prevent path traversal attacks. +- Added active_since and active_till in zabbix_maintenance +- Added content_type for email in zabbix_mediatypes +- Added zabbix_group_events_info module +- Introduce flag `enable_version_check` to allow installations on non-supported platforms. +- action module - Added notify_if_canceled property +- agent and proxy roles - Set default `zabbix_api_server_port` to 80 or 443 based on `zabbix_api_use_ssl` +- agent role - Removed duplicative Windows agent task +- agent role - Standardized default yum priority to 99 +- agent, javagateway, proxy, server, and web role - added the http_proxy and https_proxy environment variables to "Debian | Download gpg key" analog to other tasks +- agent, javagateway, proxy, server, and web role - introduced default variable zabbix_repo_deb_gpg_key_url with value http://repo.zabbix.com/zabbix-official-repo.key +- agent, javagateway, proxy, server, and web role - introduced default variable zabbix_repo_deb_include_deb_src with value true +- agent, javagateway, proxy, server, and web role - removed superfluous slash in zabbix_gpg_key of the Debian vars and renamed key to zabbix-repo instead of zabbix-official-repo +- agent, javagateway, proxy, server, and web role - used variable zabbix_repo_deb_include_deb_src in "Debian | Installing repository" to determine whether deb-src should be added to /etc/apt/sources.list.d/zabbix.sources +- agent, javagateway, proxy, server, and web role - used zabbix_repo_deb_gpg_key_url in "Debian | Download gpg key" instead of hardcoded url +- all roles - Re-added ability to override Debian repo source +- all roles - Updated Debian repository format to 822 standard +- api_requests - Handled error from depricated CertificateError class +- multiple roles - Removed unneeded Apt Clean commands. +- proxy role - Updated MariaDB version for Centos 7 to 10.11 +- various - updated testing modules +- various - updated to fully qualified module names +- zabbix agent - Added capability to add additional configuration includes +- zabbix web - Allowed the independent configuration of php-fpm without creating vhost. +- zabbix_api_info module added +- zabbix_correlation module added +- zabbix_host_info - added ability to get all the hosts configured in Zabbix +- zabbix_proxy role - Add variable zabbix_proxy_dbpassword_hash_method to control whether you want postgresql user password to be hashed with md5 or want to use db default. When zabbix_proxy_dbpassword_hash_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram-sha-256 hashing method. +- zabbix_server role - Add variable zabbix_server_dbpassword_hash_method to control whether you want postgresql user password to be hashed with md5 or want to use db default. When zabbix_server_dbpassword_hash_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram-sha-256 hashing method. +- zabbix_service_info module added +- zabbix_template - Add template_yaml parameter. +- zabbix_templategroup module added +- zabbix_user module - add current_passwd optional parameter to enable password updating of the currently logged in user (https://www.zabbix.com/documentation/6.4/en/manual/api/reference/user/update) +- zabbix_web role, Refactored zabbix_selinux variable names to correlate with selinux boolean names. + +containers.podman +~~~~~~~~~~~~~~~~~ + +- Add log_opt and annotaion options to podman_play module +- Add option to parse CreateCommand easily for diff calc +- Add support for setting underlying interface in podman_network +- Alias generate systemd options stop_timeout and time +- CI - Fix rootfs test in CI +- CI - add custom podman path to tasks +- CI - add parametrized executables to tests +- Fix CI rootfs for podman_container +- Fix broken conmon version in CI install +- Improve security_opt comparison between existing container +- podman_container - Add new arguments to podman status commands +- podman_container - Add pasta as default network mode after v5 +- podman_container - Update env_file to accept a list of files instead of a single file +- podman_container_exec - Return data for podman exec module +- podman_generate_systemd - Fix broken example for podman_generate_systemd (#708) +- podman_login - Update podman_login.py +- podman_play - Add support for kube yaml files with multi-documents (#724) +- podman_play - Update the logic for deleting pods/containers in podman_play +- podman_pod_info - handle return being list in Podman 5 (#713) +- podman_secret_info - Add secrets info module + +dellemc.enterprise_sonic +~~~~~~~~~~~~~~~~~~~~~~~~ + +- sonic_aaa - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/304). +- sonic_aaa - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_acl_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/306). +- sonic_acl_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_bgp_as_paths - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/290). +- sonic_bgp_communities - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/251). +- sonic_bgp_ext_communities - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/252). +- sonic_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/301). +- sonic_interfaces - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). +- sonic_interfaces - Change deleted design for interfaces module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/310). +- sonic_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_ip_neighbor - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/285). +- sonic_ip_neighbor - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_l2_acls - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/306). +- sonic_l2_acls - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_l2_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/303). +- sonic_l2_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_l3_acls - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/306). +- sonic_l3_acls - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_l3_interfaces - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/241). +- sonic_lag_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/303). +- sonic_lag_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_logging - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/285). +- sonic_logging - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_mclag - Add VLAN range support for 'unique_ip' and 'peer_gateway' options (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/288). +- sonic_mclag - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/288). +- sonic_ntp - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/281). +- sonic_ntp - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_port_breakout - Add Ansible support for all port breakout modes now allowed in Enterprise SONiC (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/276). +- sonic_port_breakout - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/291). +- sonic_port_group - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/284). +- sonic_port_group - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_radius_server - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/279). +- sonic_radius_server - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_static_routes - Add playbook check and diff modes support for static routes resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/313). +- sonic_static_routes - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_system - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/284). +- sonic_system - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_tacacs_server - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/281). +- sonic_tacacs_server - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_users - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/304). +- sonic_users - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_vlans - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/301). +- sonic_vlans - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- sonic_vrfs - Add mgmt VRF replaced state handling to sonic_vrfs module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/298). +- sonic_vrfs - Add mgmt VRF support to sonic_vrfs module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/293). +- sonic_vrfs - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/285). +- sonic_vrfs - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). +- tests - Add UTs for BFD, COPP, and MAC modules (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/287). +- tests - Enable contiguous execution of all regression integration tests on an S5296f (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/277). +- tests - Fix the bgp CLI test base_cfg_path derivation of the bgp role_path by avoiding relative pathing from the possibly external playbook_dir (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/283). + +dellemc.openmanage +~~~~~~~~~~~~~~~~~~ + +- Ansible lint issues are fixed for the collections. +- For idrac_certificate role, added support for import operation of `HTTPS` certificate with the SSL key. +- For idrac_certificates module, below enhancements are made: Added support for import operation of `HTTPS` certificate with the SSL key. The `email_address` has been made as an optional parameter. +- For idrac_gather_facts role, added storage controller details in the role output. +- Module ``redfish_storage_volume`` is enhanced to support reboot options and job tracking operation. +- idrac_reset - This module allows you to reset the iDRAC to factory default settings. +- redfish_storage_volume - This module is enhanced to support iDRAC8. + +dellemc.powerflex +~~~~~~~~~~~~~~~~~ + +- Added support for PowerFlex Denver version(4.5.x) to TB and Config role. +- Added support for PowerFlex ansible modules and roles on Azure. +- Added support for executing Ansible PowerFlex modules and roles on AWS environment. +- Added support for resource group provisioning to validate, deploy, edit, add nodes and delete a resource group. +- The Info module is enhanced to list the firmware repositories. +- The Info module is enhanced to retrieve lists related to fault sets, service templates, deployments, and managed devices. +- The SDS module has been enhanced to facilitate SDS creation within a fault set. + +f5networks.f5_modules +~~~~~~~~~~~~~~~~~~~~~ + +- bigiq_device_discovery - Changes in documentation related to Provider block + +fortinet.fortimanager +~~~~~~~~~~~~~~~~~~~~~ + +- Added deprecated warning to invalid argument name, please change the invalid argument name such as "var-name", "var name" to "var_name". +- Renamed the input argument "message" to "fmgr_message" to comply with Ansible requirements. +- Supported fortimanager 7.4.2, 21 new modules. + +google.cloud +~~~~~~~~~~~~ + +- anisble-test - integration tests are now run against 2.14.0 and 2.15.0 +- ansible - 2.14.0 is now the minimum version supported +- ansible-lint - fixed over a thousand reported errors +- ansible-lint - upgraded to 6.22 +- ansible-test - add support for GCP application default credentials (https://github.com/ansible-collections/google.cloud/issues/359). +- gcp_serviceusage_service - added backoff when checking for operation completion. +- gcp_serviceusage_service - use alloyb API for the integration test as spanner conflicts with other tests +- gcp_sql_ssl_cert - made sha1_fingerprint optional, which enables resource creation +- gcp_storage_default_object_acl - removed non-existent fields; the resource is not usable. + +grafana.grafana +~~~~~~~~~~~~~~~ + +- Add 'run_once' to download&unzip tasks by @v-zhuravlev in https://github.com/grafana/grafana-ansible-collection/pull/136 +- Adding `oauth_allow_insecure_email_lookup` to fix oauth user sync error by @hypery2k in https://github.com/grafana/grafana-ansible-collection/pull/132 +- Bump ansible-core from 2.15.4 to 2.15.8 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/137 +- Bump ansible-lint from 24.2.0 to 24.2.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/164 +- Bump ansible-lint from 24.2.0 to 24.2.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/168 +- Bump ansible-lint from 6.13.1 to 6.14.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/139 +- Bump ansible-lint from 6.14.3 to 6.22.2 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/142 +- Bump ansible-lint from 6.22.2 to 24.2.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/150 +- Bump black from 24.1.1 to 24.3.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/165 +- Bump cryptography from 41.0.4 to 41.0.6 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/126 +- Bump jinja2 from 3.1.2 to 3.1.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/129 +- Bump pylint from 2.16.2 to 3.0.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/141 +- Bump pylint from 3.0.3 to 3.1.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/158 +- Bump pylint from 3.0.3 to 3.1.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/161 +- Bump the pip group across 1 directories with 1 update by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/156 +- Bump yamllint from 1.29.0 to 1.33.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/140 +- Bump yamllint from 1.29.0 to 1.33.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/143 +- Bump yamllint from 1.33.0 to 1.34.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/151 +- Bump yamllint from 1.33.0 to 1.35.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/155 +- Bump yamllint from 1.33.0 to 1.35.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/159 +- Change handler to systemd by @v-zhuravlev in https://github.com/grafana/grafana-ansible-collection/pull/135 +- Clarify grafana-server configuration in README by @VGerris in https://github.com/grafana/grafana-ansible-collection/pull/177 +- Drop curl check by @v-zhuravlev in https://github.com/grafana/grafana-ansible-collection/pull/120 +- ExecStartPre and EnvironmentFile settings to system unit file by @fabiiw05 in https://github.com/grafana/grafana-ansible-collection/pull/157 +- Fix check mode for grafana role by @Boschung-Mecatronic-AG-Infrastructure in https://github.com/grafana/grafana-ansible-collection/pull/125 +- Fix check mode in Grafana Agent by @AmandaCameron in https://github.com/grafana/grafana-ansible-collection/pull/124 +- Fix links in grafana_agent/defaults/main.yaml by @PabloCastellano in https://github.com/grafana/grafana-ansible-collection/pull/134 +- Topic/grafana agent idempotency by @ohdearaugustin in https://github.com/grafana/grafana-ansible-collection/pull/147 +- Update description to match module by @brmurphy in https://github.com/grafana/grafana-ansible-collection/pull/179 +- Update tags in README by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/121 +- datasources url parameter fix by @dergudzon in https://github.com/grafana/grafana-ansible-collection/pull/162 + +hetzner.hcloud +~~~~~~~~~~~~~~ + +- Add the `hetzner.hcloud.all` group to configure all the modules using `module_defaults`. +- Allow to set the `api_endpoint` module argument using the `HCLOUD_ENDPOINT` environment variable. +- Removed the `hcloud_` prefix from all modules names, e.g. `hetzner.hcloud.hcloud_firewall` was renamed to `hetzner.hcloud.firewall`. Old module names will continue working. +- Renamed the `endpoint` module argument to `api_endpoint`, backward compatibility is maintained using an alias. +- Replace deprecated `ansible.netcommon` ip utils with python `ipaddress` module. The `ansible.netcommon` collection is no longer required by the collections. +- firewall - Allow forcing the deletion of firewalls that are still in use. +- firewall - Do not silence 'firewall still in use' delete failures. +- firewall - Return resources the firewall is `applied_to`. +- firewall_info - Add new `firewall_info` module to gather firewalls info. +- firewall_resource - Add new `firewall_resource` module to manage firewalls resources. +- hcloud inventory - Add the `api_endpoint` option. +- hcloud inventory - Deprecate the `api_token_env` option, suggest using a lookup plugin (`{{ lookup('ansible.builtin.env', 'YOUR_ENV_VAR') }}`) or use the well-known `HCLOUD_TOKEN` environment variable name. +- hcloud inventory - Rename the `token_env` option to `api_token_env`, use aliases for backward compatibility. +- hcloud inventory - Rename the `token` option to `api_token`, use aliases for backward compatibility. +- inventory - Add `hostname` option used to template the hostname of the instances. +- inventory - Add `hostvars_prefix` and hostvars_suffix` options to customize the inventory host variables keys. +- network - Allow renaming networks. +- primary_ip - Use the `server` option to assign a Primary IP being created to a server. +- server - Allow passing Datacenter name or ID to the `datacenter` argument. +- server - Allow passing Image name or ID to the `image` argument. +- server - Allow passing Location name or ID to the `location` argument. +- server - Allow passing SSH Keys names or IDs to the `ssh_keys` argument. +- server - Allow passing Volume names or IDs to the `volumes` argument. +- server - Renamed the `allow_deprecated_image` option to `image_allow_deprecated`. + +ibm.storage_virtualize +~~~~~~~~~~~~~~~~~~~~~~ + +- ibm_sv_manage_replication_policy - Added support to configure a 2-site-ha policy. +- ibm_sv_manage_snapshot - Added support to restore entire volumegroup from a snapshot of that volumegroup. +- ibm_sv_manage_snapshot - Added support to restore subset of volumes of a volumegroup from a snapshot +- ibm_svc_host - Added support to create nvmetcp host. +- ibm_svc_info - Added support to display information about partition, quorum, IO group, VG replication and enclosure, snmp server and ldap server +- ibm_svc_info - Added support to display information about thinclone/clone volumes and volumegroups. +- ibm_svc_manage_volume - Added support to create clone or thinclone from snapshot +- ibm_svc_manage_volumgroup - Added support to create clone or thinkclone volumegroup from snapshot from a subset of volumes +- ibm_svc_manage_volumgroup - Added support to delete volumegroups keeping volumes via 'evictvolumes'. + +inspur.ispim +~~~~~~~~~~~~ + +- Modify ansible-test.yml to add the ansible 2.17 test https://github.com/ispim/inspur.ispim/pull/33. +- Modify ansible-test.yml to add the ansible2.16 test. +- Modify edit_smtp_com and add description information. + +junipernetworks.junos +~~~~~~~~~~~~~~~~~~~~~ + +- 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. + +kubernetes.core +~~~~~~~~~~~~~~~ + +- helm - add ``reuse_values`` and ``reset_values`` support to helm module (https://github.com/ansible-collections/kubernetes.core/issues/394). +- k8s - add new option ``delete_all`` to support deletion of all resources when state is set to ``absent``. (https://github.com/ansible-collections/kubernetes.core/issues/504) +- k8s, k8s_info - add a hidden_fields option to allow fields to be hidden in the results of k8s and k8s_info +- k8s_drain - add ability to filter the list of pods to be drained by a pod label selector (https://github.com/ansible-collections/kubernetes.core/issues/474). +- kubectl - added support of local enviroment variable that will be used for kubectl and may be requried for establishing connections ifself (https://github.com/ansible-collections/kubernetes.core/pull/702) +- kustomize - new parameter added to --enable-helm (https://github.com/ansible-collections/kubernetes.core/issues/568) + +lowlydba.sqlserver +~~~~~~~~~~~~~~~~~~ + +- Add ability to prevent changing login's password, even if password supplied. +- Add new input strings to be compatible with dbops v0.9.x (https://github.com/lowlydba/lowlydba.sqlserver/pull/231) + +microsoft.ad +~~~~~~~~~~~~ + +- Added ``group/microsoft.ad.domain`` module defaults group for the ``computer``, ``group``, ``object_info``, ``object``, ``ou``, and ``user`` module. Users can use this defaults group to set common connection options for these modules such as the ``domain_server``, ``domain_username``, and ``domain_password`` options. +- Added support for Jinja2 templating in ldap inventory. +- Make ``name`` an optional parameter for the AD modules. Either ``name`` or ``identity`` needs to be set with their respective behaviours. If creating a new AD user and only ``identity`` is set, that will be the value used for the name of the object. +- Set minimum supported Ansible version to 2.14 to align with the versions still supported by Ansible. +- object_info - Add ActiveDirectory module import + +netapp.ontap +~~~~~~~~~~~~ + +- na_ontap_cifs - new option `offline_files` added in REST, requires ONTAP 9.10 or later. +- na_ontap_cifs_server - new option `is_multichannel_enabled` added in REST, requires ONTAP 9.10 or later. +- na_ontap_cifs_server - new option `lm_compatibility_level` added in REST, requires ONTAP 9.8 or later. +- na_ontap_cluster - new option `certificate.uuid` added in REST, requires ONTAP 9.10 or later. +- na_ontap_cluster_peer - added REST only support for modifying remote intercluster addresses in cluster peer relation. +- na_ontap_ems_destination - new options `syslog`, `port`, `transport`, `message_format`, `timestamp_format_override` and `hostname_format_override` added in REST, requires ONTAP 9.12.1 or later. +- na_ontap_export_policy_rule - added `actions` and `modify` in module output. +- na_ontap_file_security_permissions_acl - added `actions` and `modify` in module output. +- na_ontap_igroup_initiator - added `actions` in module output. +- na_ontap_lun_map - added `actions` in module output. +- na_ontap_lun_map_reporting_nodes - added `actions` in module output. +- na_ontap_name_mappings - added `actions` and `modify` in module output. +- na_ontap_net_ifgrp - updated documentation for parameter `name`. +- na_ontap_node - added `modify` in module output. +- na_ontap_rest_info - added warning message if given subset doesn't support option `owning_resource`. +- na_ontap_s3_services - create, modify S3 service returns `s3_service_info` in module output. +- na_ontap_snapmirror - updated resync and resume operation for synchronous snapmirror relationship in REST. +- na_ontap_storage_auto_giveback - added information on modified attributes in module output. +- na_ontap_vscan_scanner_pool - added REST support to Vscan Scanner Pools Configuration module, requires ONTAP 9.6 or later. +- na_ontap_vserver_audit - new options `schedule.*` added under `log.rotation`, requires ONTAP 9.6 or later. + +netapp.storagegrid +~~~~~~~~~~~~~~~~~~ + +- na_sg_grid_account - New option ``allow_select_object_content`` for enabling use of the S3 SelectObjectContent API. +- na_sg_grid_account - New option ``description`` for setting additional identifying information for the tenant account. + +netbox.netbox +~~~~~~~~~~~~~ + +- CI - CI adjustments [#1154](https://github.com/netbox-community/ansible_modules/pull/1154) [#1155](https://github.com/netbox-community/ansible_modules/pull/1155) [#1157](https://github.com/netbox-community/ansible_modules/pull/1157) +- nb_inventory - Add Virtual Disks to inventory [#1188](https://github.com/netbox-community/ansible_modules/pull/1188) +- nb_inventory - Add facility group_by option [#1059](https://github.com/netbox-community/ansible_modules/pull/1059) +- nb_inventory - Don't extract null values from custom fields [#1184](https://github.com/netbox-community/ansible_modules/pull/1184) +- nb_inventory - Enable ansible-vault strings in config-context data [#1114](https://github.com/netbox-community/ansible_modules/pull/1114) +- nb_inventory - Improve documentation for oob_ip_as_primary_ip [#1218](https://github.com/netbox-community/ansible_modules/pull/1218) +- nb_inventory - Make oob_ip available regardless of oob_ip_as_primary_ip option [#1211](https://github.com/netbox-community/ansible_modules/pull/1211) +- nb_lookup - Add custom field choice set [#1186](https://github.com/netbox-community/ansible_modules/pull/1186) +- nb_lookup - Add endpoint for Virtual Disks [#1177](https://github.com/netbox-community/ansible_modules/pull/1177) +- nb_lookup - Add new VPN endpoints for NetBox 3.7 support [#1162](https://github.com/netbox-community/ansible_modules/pull/1162) +- netbox_device_type and netbox_rack - Change u_height to float [#1200](https://github.com/netbox-community/ansible_modules/pull/1200) +- netbox_export_templates - Update documentation [#1214](https://github.com/netbox-community/ansible_modules/pull/1214) +- netbox_platform - Add config_template option to netbox_platform [#1119](https://github.com/netbox-community/ansible_modules/pull/1119) +- netbox_power_port - Add label [#1202](https://github.com/netbox-community/ansible_modules/pull/1202) +- netbox_power_port_template - Add option module_type to netbox_power_port_template [#1105](https://github.com/netbox-community/ansible_modules/pull/1105) +- netbox_rack_role - Add description option [#1143](https://github.com/netbox-community/ansible_modules/pull/1143) +- netbox_virtual_disk - New module [#1153](https://github.com/netbox-community/ansible_modules/pull/1153) +- netbox_virtual_machine and netbox_device - Add option config_template [#1171](https://github.com/netbox-community/ansible_modules/pull/1171) + +purestorage.flasharray +~~~~~~~~~~~~~~~~~~~~~~ + +- all - ``distro`` package added as a pre-requisite +- multiple - Remove packaging pre-requisite. +- multiple - Where only REST 2.x endpoints are used, convert to REST 2.x methodology. +- purefa_arrayname - Convert to REST v2 +- purefa_dns - Added facility to add a CA certifcate to management DNS and check peer. +- purefa_eula - Only sign if not previously signed. From REST 2.30 name, title and company are no longer required +- purefa_hg - Add support to rename existing hostgroup +- purefa_info - Add NSID value for NVMe namespace in `hosts` response +- purefa_info - Add ``is_local`` parameter for snapshots +- purefa_info - Add performance data for some subsets +- purefa_info - Add service_mode to identify if array is Evergreen//One or standard FlashArray +- purefa_info - Add support for controller uptime from Purity//FA 6.6.3 +- purefa_info - Expose NFS security flavor for policies +- purefa_info - Expose cloud capacity details if array is a Cloud Block Store. +- purefa_info - Subset `pgroups` now also provides a new dict called `deleted_pgroups` +- purefa_inventory - Convert to REST v2 +- purefa_ntp - Convert to REST v2 +- purefa_offload - Convert to REST v2 +- purefa_offload - Remove `nfs` as an option when Purity//FA 6.6.0 or higher is detected +- purefa_pg - Enhance ``state absent`` to work on volumes, hosts and hostgroups +- purefa_pgsnap - Module now requires minimum FlashArray Purity//FA 6.1.0 +- purefa_policy - Add SMB user based enumeration parameter +- purefa_policy - Added NFS security flavors for accessing files in the mount point. +- purefa_policy - Remove default setting for nfs_version to allow for change of version at policy level +- purefa_ra - Add ``present`` and ``absent`` as valid ``state`` options +- purefa_ra - Add connecting as valid status of RA to perform operations on +- purefa_ra - Convert to REST v2 +- purefa_snap - Add ``created_epoch`` parameter in response +- purefa_snap - Add support for suffix on remote offload snapshots +- purefa_syslog - ``name`` becomes a required parameter as module converts to full REST 2 support +- purefa_vnc - Convert to REST v2 + +purestorage.flashblade +~~~~~~~~~~~~~~~~~~~~~~ + +- purefb_bucket - Add support for public buckets +- purefb_bucket - Add support for strict 17a-4 WORM compliance. +- purefb_bucket - From REST 2.12 the `mode` parameter default changes to `multi-site-writable`. +- purefb_connect - Increase Fan-In and Fan-Out maximums +- purefb_ds - Add `force_bind_password` parameter to allow module to be idempotent. +- purefb_fs - Add ``group_ownership`` parameter from Purity//FB 4.4.0. +- purefb_fs - Added SMB Continuous Availability parameter. Requires REST 2.12 or higher. +- purefb_info - Added enhanced information for buckets, filesystems and snapshots, based on new features in REST 2.12 +- purefb_info - Show array network access policy from Purity//FB 4.4.0 +- purefb_policy - Add support for network access policies from Purity//FB 4.4.0 +- purefb_s3acc - Add support for public buckets +- purefb_s3acc - Remove default requirements for ``hard_limit`` and ``default_hard_limit`` + +telekom_mms.icinga_director +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Extended docs and examples for multiple assign_filter conditions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/227) +- Increase sleep to 5 seconds (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/245) + +theforeman.foreman +~~~~~~~~~~~~~~~~~~ + +- content_view_publish role - allow passing ``async`` and ``poll`` to the module (https://github.com/theforeman/foreman-ansible-modules/pull/1676) +- convert2rhel role - install ``convert2rhel`` from ``cdn-public.redhat.com``, dropping the requirement of a custom CA cert + +vmware.vmware_rest +~~~~~~~~~~~~~~~~~~ + +- Add requires_ansible to manifest (https://github.com/ansible-community/ansible.content_builder/pull/76). +- Generate action_groups for the vmware.vmware_rest collection (https://github.com/ansible-community/ansible.content_builder/issues/75). +- Use 7.0 U3 API spec to build the modules (https://github.com/ansible-collections/vmware.vmware_rest/pull/449). +- Use folder attribute for host and dc module only (https://github.com/ansible-community/ansible.content_builder/pull/79). + +vultr.cloud +~~~~~~~~~~~ + +- Added retry on HTTP 504 returned by the API (https://github.com/vultr/ansible-collection-vultr/pull/104). +- Implemented a feature to distinguish resources by region if available. This allows to have identical name per region e.g. a VPC named ``default`` in each region. (https://github.com/vultr/ansible-collection-vultr/pull/98). +- instance - Added a new param ``user_scheme`` to change user scheme to non-root on Linux while creating the instance (https://github.com/vultr/ansible-collection-vultr/issues/96). + +Breaking Changes / Porting Guide +-------------------------------- + +Ansible-core +~~~~~~~~~~~~ + +- assert - Nested templating may result in an inability for the conditional to be evaluated. See the porting guide for more information. + +amazon.aws +~~~~~~~~~~ + +- 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). + +cloud.common +~~~~~~~~~~~~ + +- Bump minimum Python supported version to 3.9. +- Remove support for ansible-core < 2.14. + +community.aws +~~~~~~~~~~~~~ + +- 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``. + +community.ciscosmb +~~~~~~~~~~~~~~~~~~ + +- in facts of interface 'bandwith' changed to 'bandwidth' + +community.dns +~~~~~~~~~~~~~ + +- The default for the ``txt_character_encoding`` options in various modules and plugins changed from ``octal`` to ``decimal`` (https://github.com/ansible-collections/community.dns/pull/196). +- inventory plugins - ``filters`` is now no longer an alias of ``simple_filters``, but a new, different option (https://github.com/ansible-collections/community.dns/pull/196). +- inventory plugins - the ``plugin`` option is now required (https://github.com/ansible-collections/community.dns/pull/196). +- lookup, lookup_as_dict - the default for ``search`` changed from ``false`` (implicit default for community.dns 2.x.y) to ``true`` (https://github.com/ansible-collections/community.dns/issues/200, https://github.com/ansible-collections/community.dns/pull/201). + +community.general +~~~~~~~~~~~~~~~~~ + +- cpanm - the default of the ``mode`` option changed from ``compatibility`` to ``new`` (https://github.com/ansible-collections/community.general/pull/8198). +- django_manage - the module now requires Django >= 4.1 (https://github.com/ansible-collections/community.general/pull/8198). +- django_manage - the module will now fail if ``virtualenv`` is specified but no virtual environment exists at that location (https://github.com/ansible-collections/community.general/pull/8198). +- redfish_command, redfish_config, redfish_info - change the default for ``timeout`` from 10 to 60 (https://github.com/ansible-collections/community.general/pull/8198). + +community.hrobot +~~~~~~~~~~~~~~~~ + +- robot inventory plugin - ``filters`` is now no longer an alias of ``simple_filters``, but a new, different option (https://github.com/ansible-collections/community.hrobot/pull/101). + +community.okd +~~~~~~~~~~~~~ + +- Bump minimum Python suupported version to 3.9 (https://github.com/openshift/community.okd/pull/202). +- Remove support for ansible-core < 2.14 (https://github.com/openshift/community.okd/pull/202). + +hetzner.hcloud +~~~~~~~~~~~~~~ + +- Drop support for ansible-core 2.13. +- certificate - The `not_valid_before` and `not_valid_after` values are now returned as ISO-8601 formatted strings. +- certificate_info - The `not_valid_before` and `not_valid_after` values are now returned as ISO-8601 formatted strings. +- inventory - Remove the deprecated `api_token_env` option, you may use the `ansible.builtin.env` lookup as alternative. +- iso_info - The `deprecated` value is now returned as ISO-8601 formatted strings. + +kubernetes.core +~~~~~~~~~~~~~~~ + +- Remove support for ansible-core < 2.14 +- Update python kubernetes library to 24.2.0, helm/kind-action to 1.8.0, kubernetes >= 1.24. + +theforeman.foreman +~~~~~~~~~~~~~~~~~~ + +- content_view_filter - stop managing rules from this module, ``content_view_filter_rule`` should be used for that +- inventory plugin - do not default to ``http://localhost:3000`` as the Foreman URL, providing a URL is now mandatory + +vmware.vmware_rest +~~~~~~~~~~~~~~~~~~ + +- Remove support for ansible-core < 2.14 + +Deprecated Features +------------------- + +- The ``inspur.sm`` collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11. See `the removal process for details on how this works `__ (https://forum.ansible.com/t/2854). +- The ``netapp.storagegrid`` collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11. See `the removal process for details on how this works `__ (https://forum.ansible.com/t/2811). + +Ansible-core +~~~~~~~~~~~~ + +- Old style vars plugins which use the entrypoints `get_host_vars` or `get_group_vars` are deprecated. The plugin should be updated to inherit from `BaseVarsPlugin` and define a `get_vars` method as the entrypoint. +- The 'required' parameter in 'ansible.module_utils.common.process.get_bin_path' API is deprecated (https://github.com/ansible/ansible/issues/82464). +- ``module_utils`` - importing the following convenience helpers from ``ansible.module_utils.basic`` has been deprecated: ``get_exception``, ``literal_eval``, ``_literal_eval``, ``datetime``, ``signal``, ``types``, ``chain``, ``repeat``, ``PY2``, ``PY3``, ``b``, ``binary_type``, ``integer_types``, ``iteritems``, ``string_types``, ``test_type``, ``map`` and ``shlex_quote``. +- ansible-doc - role entrypoint attributes are deprecated and eventually will no longer be shown in ansible-doc from ansible-core 2.20 on (https://github.com/ansible/ansible/issues/82639, https://github.com/ansible/ansible/pull/82678). +- paramiko connection plugin, configuration items in the global scope are being deprecated and will be removed in favor or the existing same options in the plugin itself. Users should not need to change anything (how to configure them are the same) but plugin authors using the global constants should move to using the plugin's get_option(). + +amazon.aws +~~~~~~~~~~ + +- 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). +- iam_role_info - in a release after 2026-05-01 paths must begin and end with ``/`` (https://github.com/ansible-collections/amazon.aws/pull/1998). +- 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). + +community.aws +~~~~~~~~~~~~~ + +- 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). + +community.crypto +~~~~~~~~~~~~~~~~ + +- acme documentation fragment - the default ``community.crypto.acme[.documentation]`` docs fragment is deprecated and will be removed from community.crypto 3.0.0. Replace it with both the new ``community.crypto.acme.basic`` and ``community.crypto.acme.account`` fragments (https://github.com/ansible-collections/community.crypto/pull/735). +- acme.backends module utils - from community.crypto on, all implementations of ``CryptoBackend`` must override ``get_ordered_csr_identifiers()``. The current default implementation, which simply sorts the result of ``get_csr_identifiers()``, will then be removed (https://github.com/ansible-collections/community.crypto/pull/725). +- acme.backends module utils - the ``get_cert_information()`` method for a ACME crypto backend must be implemented from community.crypto 3.0.0 on (https://github.com/ansible-collections/community.crypto/pull/736). +- crypto.module_backends.common module utils - the ``crypto.module_backends.common`` module utils is deprecated and will be removed from community.crypto 3.0.0. Use the improved ``argspec`` module util instead (https://github.com/ansible-collections/community.crypto/pull/749). +- openssl_csr_pipe, openssl_privatekey_pipe, x509_certificate_pipe - the current behavior of check mode is deprecated and will change in community.crypto 3.0.0. The current behavior is similar to the modules without ``_pipe``: if the object needs to be (re-)generated, only the ``changed`` status is set, but the object is not updated. From community.crypto 3.0.0 on, the modules will ignore check mode and always act as if check mode is not active. This behavior can already achieved now by adding ``check_mode: false`` to the task. If you think this breaks your use-case of this module, please `create an issue in the community.crypto repository `__ (https://github.com/ansible-collections/community.crypto/issues/712, https://github.com/ansible-collections/community.crypto/pull/714). + +community.dns +~~~~~~~~~~~~~ + +- hetzner_dns_records and hosttech_dns_records inventory plugins - the ``filters`` option has been renamed to ``simple_filters``. The old name will stop working in community.hrobot 2.0.0 (https://github.com/ansible-collections/community.dns/pull/181). + +community.docker +~~~~~~~~~~~~~~~~ + +- docker_compose - the Docker Compose v1 module is deprecated and will be removed from community.docker 4.0.0. Please migrate to the ``community.docker.docker_compose_v2`` module, which works with Docker Compose v2 (https://github.com/ansible-collections/community.docker/issues/823, https://github.com/ansible-collections/community.docker/pull/833). +- docker_container - the default ``ignore`` for the ``image_name_mismatch`` parameter has been deprecated and will switch to ``recreate`` in community.docker 4.0.0. A deprecation warning will be printed in situations where the default value is used and where a behavior would change once the default changes (https://github.com/ansible-collections/community.docker/pull/703). +- various modules and plugins - the ``ssl_version`` option has been deprecated and will be removed from community.docker 4.0.0. It has already been removed from Docker SDK for Python 7.0.0, and was only necessary in the past to work around SSL/TLS issues (https://github.com/ansible-collections/community.docker/pull/853). + +community.general +~~~~~~~~~~~~~~~~~ + +- MH DependencyCtxMgr module_utils - deprecate ``module_utils.mh.mixin.deps.DependencyCtxMgr`` in favour of ``module_utils.deps`` (https://github.com/ansible-collections/community.general/pull/8280). +- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.AnsibleModule`` (https://github.com/ansible-collections/community.general/pull/8280). +- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.DependencyCtxMgr`` (https://github.com/ansible-collections/community.general/pull/8280). +- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.StateMixin`` (https://github.com/ansible-collections/community.general/pull/8280). +- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.VarDict,`` (https://github.com/ansible-collections/community.general/pull/8280). +- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.VarMeta`` (https://github.com/ansible-collections/community.general/pull/8280). +- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.VarsMixin`` (https://github.com/ansible-collections/community.general/pull/8280). +- ModuleHelper module_utils - deprecate use of ``VarsMixin`` in favor of using the ``VardDict`` module_utils (https://github.com/ansible-collections/community.general/pull/8226). +- ModuleHelper vars module_utils - bump deprecation of ``VarMeta``, ``VarDict`` and ``VarsMixin`` to version 11.0.0 (https://github.com/ansible-collections/community.general/pull/8226). +- apt_rpm - the behavior of ``state=present`` and ``state=installed`` is deprecated and will change in community.general 11.0.0. Right now the module will upgrade a package to the latest version if one of these two states is used. You should explicitly use ``state=latest`` if you want this behavior, and switch to ``state=present_not_latest`` if you do not want to upgrade the package if it is already installed. In community.general 11.0.0 the behavior of ``state=present`` and ``state=installed`` will change to that of ``state=present_not_latest`` (https://github.com/ansible-collections/community.general/issues/8217, https://github.com/ansible-collections/community.general/pull/8285). +- consul_acl - the module has been deprecated and will be removed in community.general 10.0.0. ``consul_token`` and ``consul_policy`` can be used instead (https://github.com/ansible-collections/community.general/pull/7901). +- django_manage - the ``ack_venv_creation_deprecation`` option has no more effect and will be removed from community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/8198). +- gitlab modules - the basic auth method on GitLab API have been deprecated and will be removed in community.general 10.0.0 (https://github.com/ansible-collections/community.general/pull/8383). +- hipchat callback plugin - the hipchat service has been discontinued and the self-hosted variant has been End of Life since 2020. The callback plugin is therefore deprecated and will be removed from community.general 10.0.0 if nobody provides compelling reasons to still keep it (https://github.com/ansible-collections/community.general/issues/8184, https://github.com/ansible-collections/community.general/pull/8189). +- irc - the defaults ``false`` for ``use_tls`` and ``validate_certs`` have been deprecated and will change to ``true`` in community.general 10.0.0 to improve security. You can already improve security now by explicitly setting them to ``true``. Specifying values now disables the deprecation warning (https://github.com/ansible-collections/community.general/pull/7578). + +community.hrobot +~~~~~~~~~~~~~~~~ + +- robot inventory plugin - the ``filters`` option has been renamed to ``simple_filters``. The old name will stop working in community.hrobot 2.0.0 (https://github.com/ansible-collections/community.hrobot/pull/94). + +community.okd +~~~~~~~~~~~~~ + +- openshift - the ``openshift`` inventory plugin has been deprecated and will be removed in release 4.0.0 (https://github.com/ansible-collections/kubernetes.core/issues/31). + +community.vmware +~~~~~~~~~~~~~~~~ + +- vmware_guest_tools_info - `vm_tools_install_status` will be removed from next major version (5.0.0) of the collection since the API call that provides this information has been deprecated by VMware. Use `vm_tools_running_status` / `vm_tools_version_status` instead (https://github.com/ansible-collections/community.vmware/issues/2033). + +dellemc.openmanage +~~~~~~~~~~~~~~~~~~ + +- The ``dellemc_idrac_storage_volume`` module is deprecated and replaced with ``idrac_storage_volume``. + +kubernetes.core +~~~~~~~~~~~~~~~ + +- k8s - the ``k8s`` inventory plugin has been deprecated and will be removed in release 4.0.0 (https://github.com/ansible-collections/kubernetes.core/issues/31). + +Removed Features (previously deprecated) +---------------------------------------- + +- The ``gluster.gluster`` collection was considered unmaintained and removed from Ansible 10 (https://github.com/ansible-community/community-topics/issues/225). Users can still install this collection with ``ansible-galaxy collection install gluster.gluster``. +- The ``hpe.nimble`` collection was considered unmaintained and removed from Ansible 10 (https://github.com/ansible-community/community-topics/issues/254). Users can still install this collection with ``ansible-galaxy collection install hpe.nimble``. +- The ``netapp.aws`` collection was considered unmaintained and removed from Ansible 10 (https://github.com/ansible-community/community-topics/issues/223). Users can still install this collection with ``ansible-galaxy collection install netapp.aws``. +- The ``netapp.azure`` collection was considered unmaintained and removed from Ansible 10 (https://github.com/ansible-community/community-topics/issues/234). Users can still install this collection with ``ansible-galaxy collection install netapp.azure``. +- The ``netapp.elementsw`` collection was considered unmaintained and removed from Ansible 10 (https://github.com/ansible-community/community-topics/issues/235). Users can still install this collection with ``ansible-galaxy collection install netapp.elementsw``. +- The ``netapp.um_info`` collection was considered unmaintained and removed from Ansible 10 (https://github.com/ansible-community/community-topics/issues/244). Users can still install this collection with ``ansible-galaxy collection install netapp.um_info``. +- The deprecated ``community.azure`` collection has been removed. There is a successor collection ``azure.azcollection`` in the community package which should cover the same functionality. +- The deprecated ``community.sap`` collection has been removed from Ansible 10 (https://github.com/ansible-community/community-topics/issues/247). There is a successor collection ``community.sap_libs`` in the community package which should cover the same functionality. +- The deprecated ``purestorage.fusion`` collection has been removed (https://forum.ansible.com/t/3712). + +Ansible-core +~~~~~~~~~~~~ + +- Remove deprecated APIs from ansible-docs (https://github.com/ansible/ansible/issues/81716). +- Remove deprecated JINJA2_NATIVE_WARNING environment variable (https://github.com/ansible/ansible/issues/81714) +- Remove deprecated ``scp_if_ssh`` from ssh connection plugin (https://github.com/ansible/ansible/issues/81715). +- Remove deprecated crypt support from ansible.utils.encrypt (https://github.com/ansible/ansible/issues/81717) +- Removed Python 2.7 and Python 3.6 as a supported remote version. Python 3.7+ is now required for target execution. +- With the removal of Python 2 support, the yum module and yum action plugin are removed and redirected to ``dnf``. + +amazon.aws +~~~~~~~~~~ + +- 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). + +arista.eos +~~~~~~~~~~ + +- 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. + +cisco.ios +~~~~~~~~~ + +- Deprecated ios_ntp module in favor of ios_ntp_global. +- Removed previously deprecated ios_bgp module in favor of ios_bgp_global and ios_bgp_address_family. + +cisco.iosxr +~~~~~~~~~~~ + +- Remove deprecated iosxr_logging module which is replaced with iosxr_logging_global resource module. + +cisco.nxos +~~~~~~~~~~ + +- 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. + +community.dns +~~~~~~~~~~~~~ + +- The collection no longer supports Ansible, ansible-base, and ansible-core releases that are currently End of Life at the time of the 3.0.0 release. This means that Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, and ansible-core 2.14 are no longer supported. The collection might still work with these versions, but it can stop working at any moment without advance notice, and this will not be considered a bug (https://github.com/ansible-collections/community.dns/pull/196). +- hetzner_dns_record_set, hetzner_dns_record - the deprecated alias ``name`` of the prefix option was removed (https://github.com/ansible-collections/community.dns/pull/196). +- hosttech_dns_records - the redirect to the ``hosttech_dns_record_sets`` module has been removed (https://github.com/ansible-collections/community.dns/pull/196). + +community.general +~~~~~~~~~~~~~~~~~ + +- The deprecated redirects for internal module names have been removed. These internal redirects were extra-long FQCNs like ``community.general.packaging.os.apt_rpm`` that redirect to the short FQCN ``community.general.apt_rpm``. They were originally needed to implement flatmapping; as various tooling started to recommend users to use the long names flatmapping was removed from the collection and redirects were added for users who already followed these incorrect recommendations (https://github.com/ansible-collections/community.general/pull/7835). +- ansible_galaxy_install - the ``ack_ansible29`` and ``ack_min_ansiblecore211`` options have been removed. They no longer had any effect (https://github.com/ansible-collections/community.general/pull/8198). +- cloudflare_dns - remove support for SPF records. These are no longer supported by CloudFlare (https://github.com/ansible-collections/community.general/pull/7782). +- django_manage - support for the ``command`` values ``cleanup``, ``syncdb``, and ``validate`` were removed. Use ``clearsessions``, ``migrate``, and ``check`` instead, respectively (https://github.com/ansible-collections/community.general/pull/8198). +- flowdock - this module relied on HTTPS APIs that do not exist anymore and was thus removed (https://github.com/ansible-collections/community.general/pull/8198). +- mh.mixins.deps module utils - the ``DependencyMixin`` has been removed. Use the ``deps`` module utils instead (https://github.com/ansible-collections/community.general/pull/8198). +- proxmox - the ``proxmox_default_behavior`` option has been removed (https://github.com/ansible-collections/community.general/pull/8198). +- rax* modules, rax module utils, rax docs fragment - the Rackspace modules relied on the deprecated package ``pyrax`` and were thus removed (https://github.com/ansible-collections/community.general/pull/8198). +- redhat module utils - the classes ``Rhsm``, ``RhsmPool``, and ``RhsmPools`` have been removed (https://github.com/ansible-collections/community.general/pull/8198). +- redhat_subscription - the alias ``autosubscribe`` of the ``auto_attach`` option was removed (https://github.com/ansible-collections/community.general/pull/8198). +- stackdriver - this module relied on HTTPS APIs that do not exist anymore and was thus removed (https://github.com/ansible-collections/community.general/pull/8198). +- webfaction_* modules - these modules relied on HTTPS APIs that do not exist anymore and were thus removed (https://github.com/ansible-collections/community.general/pull/8198). + +community.grafana +~~~~~~~~~~~~~~~~~ + +- removed deprecated `message` argument in `grafana_dashboard` + +community.hrobot +~~~~~~~~~~~~~~~~ + +- The collection no longer supports Ansible, ansible-base, and ansible-core releases that are currently End of Life at the time of the 2.0.0 release. This means that Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, and ansible-core 2.14 are no longer supported. The collection might still work with these versions, but it can stop working at any moment without advance notice, and this will not be considered a bug (https://github.com/ansible-collections/community.hrobot/pull/101). + +junipernetworks.junos +~~~~~~~~~~~~~~~~~~~~~ + +- Remove deprected junos_logging module which is replaced by junos_logging_global resource module. + +Security Fixes +-------------- + +Ansible-core +~~~~~~~~~~~~ + +- ANSIBLE_NO_LOG - Address issue where ANSIBLE_NO_LOG was ignored (CVE-2024-0690) +- ansible-galaxy - Prevent roles from using symlinks to overwrite files outside of the installation directory (CVE-2023-5115) +- templating - Address issues where internal templating can cause unsafe variables to lose their unsafe designation (CVE-2023-5764) + +community.dns +~~~~~~~~~~~~~ + +- hosttech_dns_records and hetzner_dns_records inventory plugins - make sure all data received from the remote servers is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.dns/pull/189). + +community.docker +~~~~~~~~~~~~~~~~ + +- docker_containers, docker_machine, and docker_swarm inventory plugins - make sure all data received from the Docker daemon / Docker machine is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.docker/pull/815). + +community.general +~~~~~~~~~~~~~~~~~ + +- cobbler, gitlab_runners, icinga2, linode, lxd, nmap, online, opennebula, proxmox, scaleway, stackpath_compute, virtualbox, and xen_orchestra inventory plugin - make sure all data received from the remote servers is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.general/pull/8098). +- keycloak_identity_provider - the client secret was not correctly sanitized by the module. The return values ``proposed``, ``existing``, and ``end_state``, as well as the diff, did contain the client secret unmasked (https://github.com/ansible-collections/community.general/pull/8355). + +community.hrobot +~~~~~~~~~~~~~~~~ + +- robot inventory plugin - make sure all data received from the Hetzner robot service server is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.hrobot/pull/99). + +Bugfixes +-------- + +Ansible-core +~~~~~~~~~~~~ + +- Add a version ceiling constraint for pypsrp to avoid potential breaking changes in the 1.0.0 release. +- All core lookups now use set_option(s) even when doing their own custom parsing. This ensures that the options are always the proper type. +- Allow for searching handler subdir for included task via include_role (https://github.com/ansible/ansible/issues/81722) +- AnsibleModule.atomic_move - fix preserving extended ACLs of the destination when it exists (https://github.com/ansible/ansible/issues/72929). +- Cache host_group_vars after instantiating it once and limit the amount of repetitive work it needs to do every time it runs. +- Call PluginLoader.all() once for vars plugins, and load vars plugins that run automatically or are enabled specifically by name subsequently. +- Consolidate systemd detection logic into one place (https://github.com/ansible/ansible/issues/80975). +- Consolidated the list of internal static vars, centralized them as constant and completed from some missing entries. +- Do not print undefined error message twice (https://github.com/ansible/ansible/issues/78703). +- Enable file cache for vaulted files during vars lookup to fix a strong performance penalty in huge and complex playbboks. +- Fix NEVRA parsing of package names that include digit(s) in them (https://github.com/ansible/ansible/issues/76463, https://github.com/ansible/ansible/issues/81018) +- Fix ``force_handlers`` not working with ``any_errors_fatal`` (https://github.com/ansible/ansible/issues/36308) +- Fix ``run_once`` being incorrectly interpreted on handlers (https://github.com/ansible/ansible/issues/81666) +- Fix an issue when setting a plugin name from an unsafe source resulted in ``ValueError: unmarshallable object`` (https://github.com/ansible/ansible/issues/82708) +- Fix check for missing _sub_plugin attribute in older connection plugins (https://github.com/ansible/ansible/pull/82954) +- Fix condition for unquoting configuration strings from ini files (https://github.com/ansible/ansible/issues/82387). +- Fix for when ``any_errors_fatal`` was ignored if error occurred in a block with always (https://github.com/ansible/ansible/issues/31543) +- Fix handlers not being executed in lockstep using the linear strategy in some cases (https://github.com/ansible/ansible/issues/82307) +- Fix handling missing urls in ansible.module_utils.urls.fetch_file for Python 3. +- Fix issue where an ``include_tasks`` handler in a role was not able to locate a file in ``tasks/`` when ``tasks_from`` was used as a role entry point and ``main.yml`` was not present (https://github.com/ansible/ansible/issues/82241) +- Fix issues when tasks withing nested blocks wouldn't run when ``force_handlers`` is set (https://github.com/ansible/ansible/issues/81533) +- Fix loading vars_plugins in roles (https://github.com/ansible/ansible/issues/82239). +- Fix notifying role handlers by listen keyword topics with the "role_name : " prefix (https://github.com/ansible/ansible/issues/82849). +- Fix setting proper locale for git executable when running on non english systems, ensuring git output can always be parsed. +- Fix tasks in always section not being executed for nested blocks with ``any_errors_fatal`` (https://github.com/ansible/ansible/issues/73246) +- Fixes permission for cache json file from 600 to 644 (https://github.com/ansible/ansible/issues/82683). +- Give the tombstone error for ``include`` pre-fork like other tombstoned action/module plugins. +- Harden python templates for respawn and ansiballz around str literal quoting +- Include the task location when a module or action plugin is deprecated (https://github.com/ansible/ansible/issues/82450). +- Interpreter discovery - Add ``Amzn`` to ``OS_FAMILY_MAP`` for correct family fallback for interpreter discovery (https://github.com/ansible/ansible/issues/80882). +- Mirror the behavior of dnf on the command line when handling NEVRAs with omitted epoch (https://github.com/ansible/ansible/issues/71808) +- Plugin loader does not dedupe nor cache filter/test plugins by file basename, but full path name. +- Properly template tags in parent blocks (https://github.com/ansible/ansible/issues/81053) +- Provide additional information about the alternative plugin in the deprecation message (https://github.com/ansible/ansible/issues/80561). +- Remove the galaxy_info field ``platforms`` from the role templates (https://github.com/ansible/ansible/issues/82453). +- Restoring the ability of filters/tests can have same file base name but different tests/filters defined inside. +- Reword the error message when the module fails to parse parameters in JSON format (https://github.com/ansible/ansible/issues/81188). +- Reword warning if the reserved keyword _ansible_ used as a module parameter (https://github.com/ansible/ansible/issues/82514). +- Run all handlers with the same ``listen`` topic, even when notified from another handler (https://github.com/ansible/ansible/issues/82363). +- Slight optimization to hostvars (instantiate template only once per host, vs per call to var). +- Stopped misleadingly advertising ``async`` mode support in the ``reboot`` module (https://github.com/ansible/ansible/issues/71517). +- ``ansible-galaxy role import`` - fix using the ``role_name`` in a standalone role's ``galaxy_info`` metadata by disabling automatic removal of the ``ansible-role-`` prefix. This matches the behavior of the Galaxy UI which also no longer implicitly removes the ``ansible-role-`` prefix. Use the ``--role-name`` option or add a ``role_name`` to the ``galaxy_info`` dictionary in the role's ``meta/main.yml`` to use an alternate role name. +- ``ansible-test sanity --test runtime-metadata`` - add ``action_plugin`` as a valid field for modules in the schema (https://github.com/ansible/ansible/pull/82562). +- ``ansible.module_utils.service`` - ensure binary data transmission in ``daemonize()`` +- ``any_errors_fatal`` should fail all hosts and rescue all of them when a ``rescue`` section is specified (https://github.com/ansible/ansible/issues/80981) +- ``include_role`` - properly execute ``v2_playbook_on_include`` and ``v2_runner_on_failed`` callbacks as well as increase ``ok`` and ``failed`` stats in the play recap, when appropriate (https://github.com/ansible/ansible/issues/77336) +- allow_duplicates - fix evaluating if the current role allows duplicates instead of using the initial value from the duplicate's cached role. +- ansible-config init will now dedupe ini entries from plugins. +- ansible-config will now properly template defaults before dumping them. +- ansible-doc - fixed "inicates" typo in output +- ansible-doc - format top-level descriptions with multiple paragraphs as multiple paragraphs, instead of concatenating them (https://github.com/ansible/ansible/pull/83155). +- ansible-galaxy - Deprecate use of the Galaxy v2 API (https://github.com/ansible/ansible/issues/81781) +- ansible-galaxy - Provide a better error message when using a requirements file with an invalid format - https://github.com/ansible/ansible/issues/81901 +- ansible-galaxy - Resolve issue with the dataclass used for galaxy.yml manifest caused by using future annotations +- ansible-galaxy - ensure path to ansible collection when installing or downloading doesn't have a backslash (https://github.com/ansible/ansible/pull/79705). +- ansible-galaxy - started allowing the use of pre-releases for collections that do not have any stable versions published. (https://github.com/ansible/ansible/pull/81606) +- ansible-galaxy - started allowing the use of pre-releases for dependencies on any level of the dependency tree that specifically demand exact pre-release versions of collections and not version ranges. (https://github.com/ansible/ansible/pull/81606) +- ansible-galaxy error on dependency resolution will not error itself due to 'virtual' collections not having a name/namespace. +- ansible-galaxy info - fix reporting no role found when lookup_role_by_name returns None. +- ansible-galaxy role import - exit with 1 when the import fails (https://github.com/ansible/ansible/issues/82175). +- ansible-galaxy role install - fix installing roles from Galaxy that have version ``None`` (https://github.com/ansible/ansible/issues/81832). +- ansible-galaxy role install - fix symlinks (https://github.com/ansible/ansible/issues/82702, https://github.com/ansible/ansible/issues/81965). +- ansible-galaxy role install - normalize tarfile paths and symlinks using ``ansible.utils.path.unfrackpath`` and consider them valid as long as the realpath is in the tarfile's role directory (https://github.com/ansible/ansible/issues/81965). +- ansible-inventory - index available_hosts for major performance boost when dumping large inventories +- ansible-pull now will expand relative paths for the ``-d|--directory`` option is now expanded before use. +- ansible-pull will now correctly handle become and connection password file options for ansible-playbook. +- ansible-test - Add a ``pylint`` plugin to work around a known issue on Python 3.12. +- ansible-test - Explicitly supply ``ControlPath=none`` when setting up port forwarding over SSH to address the scenario where the local ssh configuration uses ``ControlPath`` for all hosts, and would prevent ports to be forwarded after the initial connection to the host. +- ansible-test - Fix parsing of cgroup entries which contain a ``:`` in the path (https://github.com/ansible/ansible/issues/81977). +- ansible-test - Include missing ``pylint`` requirements for Python 3.10. +- ansible-test - Properly detect docker host when using ``ssh://`` protocol for connecting to the docker daemon. +- ansible-test - The ``libexpat`` package is automatically upgraded during remote bootstrapping to maintain compatibility with newer Python packages. +- ansible-test - The ``validate-modules`` sanity test no longer attempts to process files with unrecognized extensions as Python (resolves https://github.com/ansible/ansible/issues/82604). +- ansible-test - Update ``pylint`` to version 3.0.1. +- ansible-test ansible-doc sanity test - do not remove underscores from plugin names in collections before calling ``ansible-doc`` (https://github.com/ansible/ansible/pull/82574). +- ansible-test validate-modules sanity test - do not treat leading underscores for plugin names in collections as an attempted deprecation (https://github.com/ansible/ansible/pull/82575). +- ansible-test — Python 3.8–3.12 will use ``coverage`` v7.3.2. +- ansible.builtin.apt - calling clean = true does not properly clean certain cache files such as /var/cache/apt/pkgcache.bin and /var/cache/apt/pkgcache.bin (https://github.com/ansible/ansible/issues/82611) +- ansible.builtin.uri - the module was ignoring the ``force`` parameter and always requesting a cached copy (via the ``If-Modified-Since`` header) when downloading to an existing local file. Disable caching when ``force`` is ``true``, as documented (https://github.com/ansible/ansible/issues/82166). +- ansible_managed restored it's 'templatability' by ensuring the possible injection routes are cut off earlier in the process. +- apt - honor install_recommends and dpkg_options while installing python3-apt library (https://github.com/ansible/ansible/issues/40608). +- apt - install recommended packages when installing package via deb file (https://github.com/ansible/ansible/issues/29726). +- apt_repository - do not modify repo files if the file is a symlink (https://github.com/ansible/ansible/issues/49809). +- apt_repository - update PPA URL to point to https URL (https://github.com/ansible/ansible/issues/82463). +- assemble - fixed missing parameter 'content' in _get_diff_data API (https://github.com/ansible/ansible/issues/82359). +- async - Fix bug that stopped running async task in ``--check`` when ``check_mode: False`` was set as a task attribute - https://github.com/ansible/ansible/issues/82811 +- blockinfile - when ``create=true`` is used with a filename without path, the module crashed (https://github.com/ansible/ansible/pull/81638). +- check if there are attributes to set before attempting to set them (https://github.com/ansible/ansible/issues/76727) +- copy action now also generates temprary files as hidden ('.' prefixed) to avoid accidental pickup by running services that glob by extension. +- copy action now ensures that tempfiles use the same suffix as destination, to allow for ``validate`` to work with utilities that check extensions. +- deb822_repository - handle idempotency if the order of parameters is changed (https://github.com/ansible/ansible/issues/82454). +- debconf - allow user to specify a list for value when vtype is multiselect (https://github.com/ansible/ansible/issues/81345). +- delegate_to when set to an empty or undefined variable will now give a proper error. +- distribution.py - Recognize ALP-Dolomite as part of the SUSE OS family in Ansible, fixing its previous misidentification (https://github.com/ansible/ansible/pull/82496). +- distro - bump bundled distro version from 1.6.0 to 1.8.0 (https://github.com/ansible/ansible/issues/81713). +- dnf - fix an issue when cached RPMs were left in the cache directory even when the keepcache setting was unset (https://github.com/ansible/ansible/issues/81954) +- dnf - fix an issue when installing a package by specifying a file it provides could result in installing a different package providing the same file than the package already installed resulting in resolution failure (https://github.com/ansible/ansible/issues/82461) +- dnf - properly set gpg check options on enabled repositories according to the ``disable_gpg_check`` option (https://github.com/ansible/ansible/issues/80110) +- dnf - properly skip unavailable packages when ``skip_broken`` is enabled (https://github.com/ansible/ansible/issues/80590) +- dnf - the ``nobest`` option only overrides the distribution default when explicitly used, and is used for all supported operations (https://github.com/ansible/ansible/issues/82616) +- dnf5 - replace removed API calls +- dnf5 - respect ``allow_downgrade`` when installing packages directly from rpm files +- dnf5 - the ``nobest`` option only overrides the distribution default when used +- dwim functions for lookups should be better at detectging role context even in abscense of tasks/main. +- ensure we have logger before we log when we have increased verbosity. +- expect - fix argument spec error using timeout=null (https://github.com/ansible/ansible/issues/80982). +- fact gathering on linux now handles thread count by using rounding vs dropping decimals, it should give slightly more accurate numbers. +- facts - add a generic detection for VMware in product name. +- facts - detect VMware ESXi 8.0 virtualization by product name VMware20,1 +- fetch - Do not calculate the file size for Windows fetch targets to improve performance. +- fetch - add error message when using ``dest`` with a trailing slash that becomes a local directory - https://github.com/ansible/ansible/issues/82878 +- find - do not fail on Permission errors (https://github.com/ansible/ansible/issues/82027). +- first_found lookup now always returns a full (absolute) and normalized path +- first_found lookup now always takes into account k=v options +- flush_handlers - properly handle a handler failure in a nested block when ``force_handlers`` is set (http://github.com/ansible/ansible/issues/81532) +- galaxy - skip verification for unwanted Python compiled bytecode files (https://github.com/ansible/ansible/issues/81628). +- handle exception raised while validating with elements='int' and value is not within choices (https://github.com/ansible/ansible/issues/82776). +- include_tasks - include `ansible_loop_var` and `ansible_index_var` in a loop (https://github.com/ansible/ansible/issues/82655). +- include_vars - fix calculating ``depth`` relative to the root and ensure all files are included (https://github.com/ansible/ansible/issues/80987). +- interpreter_discovery - handle AnsibleError exception raised while interpreter discovery (https://github.com/ansible/ansible/issues/78264). +- iptables - add option choices 'src,src' and 'dst,dst' in match_set_flags (https://github.com/ansible/ansible/issues/81281). +- iptables - set jump to DSCP when set_dscp_mark or set_dscp_mark_class is set (https://github.com/ansible/ansible/issues/77077). +- known_hosts - Fix issue with `@cert-authority` entries in known_hosts incorrectly being removed. +- module no_log will no longer affect top level booleans, for example ``no_log_module_parameter='a'`` will no longer hide ``changed=False`` as a 'no log value' (matches 'a'). +- moved assemble, raw, copy, fetch, reboot, script and wait_for_connection to query task instead of play_context ensuring they get the lastest and most correct data. +- reboot action now handles connections with 'timeout' vs only 'connection_timeout' settings. +- role params now have higher precedence than host facts again, matching documentation, this had unintentionally changed in 2.15. +- roles, code cleanup and performance optimization of dependencies, now cached, and ``public`` setting is now determined once, at role instantiation. +- roles, the ``static`` property is now correctly set, this will fix issues with ``public`` and ``DEFAULT_PRIVATE_ROLE_VARS`` controls on exporting vars. +- set_option method for plugins to update config now properly passes through type casting and validation. +- ssh - add tests for the SSH connection plugin. +- support url-encoded credentials in URLs like http://x%40:%40@example.com (https://github.com/ansible/ansible/pull/82552) +- syslog - Handle ValueError exception raised when sending Null Characters to syslog with Python 3.12. +- systemd_services - update documentation regarding required_one_of and required_by parameters (https://github.com/ansible/ansible/issues/82914). +- template - Fix error when templating an unsafe string which corresponds to an invalid type in Python (https://github.com/ansible/ansible/issues/82600). +- template action will also inherit the behavior from copy (as it uses it internally). +- templating - ensure syntax errors originating from a template being compiled into Python code object result in a failure (https://github.com/ansible/ansible/issues/82606) +- unarchive - add support for 8 character permission strings for zip archives (https://github.com/ansible/ansible/pull/81705). +- unarchive - force unarchive if symlink target changes (https://github.com/ansible/ansible/issues/30420). +- unarchive modules now uses zipinfo options without relying on implementation defaults, making it more compatible with all OS/distributions. +- unsafe data - Address an incompatibility when iterating or getting a single index from ``AnsibleUnsafeBytes`` +- unsafe data - Address an incompatibility with ``AnsibleUnsafeText`` and ``AnsibleUnsafeBytes`` when pickling with ``protocol=0`` +- unsafe data - Enable directly using ``AnsibleUnsafeText`` with Python ``pathlib`` (https://github.com/ansible/ansible/issues/82414) +- uri - update the documentation for follow_redirects. +- uri action plugin now skipped during check mode (not supported) instead of even trying to execute the module, which already skipped, this does not really change the result, but returns much faster. +- vars - handle exception while combining VarsWithSources and dict (https://github.com/ansible/ansible/issues/81659). +- wait_for should not handle 'non mmapable files' again. +- winrm - Better handle send input failures when communicating with hosts under load +- winrm - Do not raise another exception during cleanup when a task is timed out - https://github.com/ansible/ansible/issues/81095 +- winrm - does not hang when attempting to get process output when stdin write failed + +amazon.aws +~~~~~~~~~~ + +- backup_plan - Fix idempotency issue when using botocore >= 1.31.36 (https://github.com/ansible-collections/amazon.aws/issues/1952). +- cloudwatchevent_rule - Fix to avoid adding quotes to JSON input for provided input_template (https://github.com/ansible-collections/amazon.aws/pull/1883). +- cloudwatchlogs_log_group_info - Implement exponential backoff when making API calls to prevent throttling exceptions (https://github.com/ansible-collections/amazon.aws/issues/2011). +- ec2_vpc_subnet - cleanly handle failure when subnet isn't created in time (https://github.com/ansible-collections/amazon.aws/pull/1848). +- 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). +- iam_managed_policy - fixed an issue where only partial results were returned (https://github.com/ansible-collections/amazon.aws/pull/1936). +- 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). +- 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). +- 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). +- module_utils/elbv2 - Fix issue when creating or modifying Load balancer rule type authenticate-oidc using ``ClientSecret`` parameter and ``UseExistingClientSecret=true`` (https://github.com/ansible-collections/amazon.aws/issues/1877). +- plugin_utils.inventory - Ensure templated options in lookup plugins are converted (https://github.com/ansible-collections/amazon.aws/issues/1955). +- 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). +- s3_object - Fix the issue when copying an object with overriding metadata. (https://github.com/ansible-collections/amazon.aws/issues/1991). +- s3_object - Fix typo that caused false deprecation warning when setting ``overwrite=latest`` (https://github.com/ansible-collections/amazon.aws/pull/1847). +- s3_object - fix idempotency issue when copying object uploaded using multipart upload (https://github.com/ansible-collections/amazon.aws/issues/2016). +- 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). + +ansible.netcommon +~~~~~~~~~~~~~~~~~ + +- 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. +- 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. + +ansible.utils +~~~~~~~~~~~~~ + +- Avoid unnecessary use of persistent connection in `cli_parse`, `fact_diff`, `update_fact` and `validate` as this action does not require a connection. + +ansible.windows +~~~~~~~~~~~~~~~ + +- Process.cs - Fix up the ``ProcessCreationFlags.CreateProtectedProcess`` typo in the enum name +- setup - Fix up typo ``collection -> collect`` when a timeout occurred during a fact subset +- win_acl - Fix broken path in case of volume junction +- win_get_url - Fix Tls1.3 getting removed from the list of security protocols +- win_powershell - Remove unecessary using in code causing stray error records in output - https://github.com/ansible-collections/ansible.windows/issues/571 +- win_service_info - Warn and not fail if ERROR_FILE_NOT_FOUND when trying to query a service - https://github.com/ansible-collections/ansible.windows/issues/556 +- win_updates - Fix up typo for Download progress event messages - https://github.com/ansible-collections/ansible.windows/issues/554 + +arista.eos +~~~~~~~~~~ + +- 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. +- correct the reference of string attribute 'reference_bandwith'. +- when static_routes and vlans are not confirgured then return empty list. + +check_point.mgmt +~~~~~~~~~~~~~~~~ + +- httpapi/checkpoint.py - Raise a fatal error if login wasn't successful. + +cisco.aci +~~~~~~~~~ + +- Fix auto logout issue in aci connection plugin to keep connection active between tasks +- Fix idempotency for l3out configuration when l3protocol is used in aci_l3out +- Fix issues with new attributes in aci_interface_policy_leaf_policy_group module by adding conditions to include attributes in the payload only when they are specified by the user (#578) +- Fix query in aci_vmm_controller + +cisco.asa +~~~~~~~~~ + +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. + +cisco.ios +~~~~~~~~~ + +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. +- Updated the ios_ping ping module to support size param. +- 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_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 - make sequence optional for rendering of standard acls. +- ios_acls - take correctly in case where we want to push an ACL from a different type +- 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 - Explicitly add neighbor address to every parser. +- ios_bgp_global - Shutdown attributes generates negate command on set as false. +- ios_bgp_global - description attribute, evalutated as complex object casted to string. +- ios_bgp_global - fix template attribute to generate configuration commands. +- ios_bgp_global - remote_as not mendatory for neighbors. +- ios_interfaces - description attribute, evalutated as complex object casted to string. +- ios_l3_interfaces - remove validation from ipv6 address parameter. +- ios_ospfv2 - Fix improper rendering of admin_distance attribute. +- ios_prefix_lists - description attribute, evalutated as complex object casted to string. +- ios_route_maps - description attribute, evalutated as complex object casted to string. +- ios_snmp_server - fix group and user IPv6 ACL commands. +- 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. +- 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. +- ios_vlans - fixes behaviour of shutdown attribute with action states. +- ios_vrf - Update and add missing argspec keys that define the attributes. +- ios_vrf - added MDT related keys + +cisco.iosxr +~~~~~~~~~~~ + +- Fix 'afi' value in bgp_templates RM to valid values. +- Fix issue in gathered state of interfaces and l3_interfaces RMs(https://github.com/ansible-collections/cisco.iosxr/issues/452, https://github.com/ansible-collections/cisco.iosxr/issues/451) + +cisco.ise +~~~~~~~~~ + +- Added missing import re in endpoint module +- 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. +- Updated to use ciscoisesdk v2.1.1 or newer fixing ciscoisesdk problem. +- ansible.utils changes to `">=2.0.0,<5.0"` in galaxy.yml dependencies. +- network_device_group - change parameter name from ndgtype to othername. +- network_device_group_info - change parameter name from ndgtype to othername. + +cisco.meraki +~~~~~~~~~~~~ + +- Adding `network_clients_info` and `network_client_info`. +- Adding `platform_meraki.rst` to docs. +- Adding `product_types` for update request on networks. +- Adding `smartquotes = False` to `conf.py` and romoving `'` from rst files. +- Adding build_ignore property to galaxy file. +- Adding support to ansible.utils >=3.0 +- Idempotency bugs fixed in devices_switch_ports. +- Parameter`organization_id` change to `organizationId` organizations_claim. +- Parameter`organization_id` change to `organizationId` organizations_clone. +- Parameter`organization_id` change to `organizationId` organizations_inventory_claim. +- Parameter`organization_id` change to `organizationId` organizations_inventory_onboarding_cloud_monitoring_export_events. +- Parameter`organization_id` change to `organizationId` organizations_inventory_onboarding_cloud_monitoring_prepare. +- Parameter`organization_id` change to `organizationId` organizations_inventory_release. +- Parameter`organization_id` change to `organizationId` organizations_licenses_assign_seats. +- Parameter`organization_id` change to `organizationId` organizations_licenses_move. +- Parameter`organization_id` change to `organizationId` organizations_licenses_move_seats. +- Parameter`organization_id` change to `organizationId` organizations_licenses_renew_seats. +- Parameter`organization_id` change to `organizationId` organizations_licensing_coterm_licenses_move. +- Parameter`organization_id` change to `organizationId` organizations_networks_combine. +- Parameter`organization_id` change to `organizationId` organizations_switch_devices_clone. +- Parameter`organization_id` change to `organizationId` organizations_users. +- Removing logs in meraki.py. +- networks_syslog_servers is now just an Update action to API. + +cisco.mso +~~~~~~~~~ + +- Fix TypeError for iteration on NoneType in mso_schema_template +- Fixed the useg_subnet logic in mso_schema_template_anp_epg_useg_attribute + +cisco.nxos +~~~~~~~~~~ + +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. +- nxos_acls - Fix parsing of ace entries with range in it. (https://github.com/ansible-collections/cisco.nxos/issues/788) +- nxos_facts - correct parse JSON output when multiple interfaces have IPv6 address assigned (https://github.com/ansible-collections/cisco.nxos/issues/771). +- nxos_file_copy - correctly set file_pull_timeout/persistent_command_timeout value. +- nxos_interfaces - Correctly enable L3 interfaces on supported N3K platforms (https://github.com/ansible-collections/cisco.nxos/issues/749). + +community.aws +~~~~~~~~~~~~~ + +- aws_ssm - disable ``enable-bracketed-paste`` to fix issue with amazon linux 2023 and other OSes (https://github.com/ansible-collections/community.aws/issues/1756) +- 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). +- ssm(connection) - fix bucket region logic when region is ``us-east-1`` (https://github.com/ansible-collections/community.aws/pull/1908). + +community.ciscosmb +~~~~~~~~~~~~~~~~~~ + +- issue +- solved issue +- typo in changelog fragment template +- typo in test script + +community.crypto +~~~~~~~~~~~~~~~~ + +- acme_* modules - also retry requests in case of socket errors, bad status lines, and unknown connection errors; improve error messages in these cases (https://github.com/ansible-collections/community.crypto/issues/680). +- acme_* modules - directly react on bad return data for account creation/retrieval/updating requests (https://github.com/ansible-collections/community.crypto/pull/682). +- acme_* modules - fix improved error reporting in case of socket errors, bad status lines, and unknown connection errors (https://github.com/ansible-collections/community.crypto/pull/684). +- acme_* modules - increase number of retries from 5 to 10 to increase stability with unstable ACME endpoints (https://github.com/ansible-collections/community.crypto/pull/685). +- acme_* modules - make account registration handling more flexible to accept 404 instead of 400 send by DigiCert's ACME endpoint when an account does not exist (https://github.com/ansible-collections/community.crypto/pull/681). +- acme_certificate - respect the order of the CNAME and SAN identifiers that are passed on when creating an ACME order (https://github.com/ansible-collections/community.crypto/issues/723, https://github.com/ansible-collections/community.crypto/pull/725). +- crypto.math module utils - change return values for ``quick_is_not_prime()`` and ``convert_int_to_bytes(0, 0)`` for special cases that do not appear when using the collection (https://github.com/ansible-collections/community.crypto/pull/733). +- ecs_certificate - fixed ``csr`` option to be empty and allow renewal of a specific certificate according to the Renewal Information specification (https://github.com/ansible-collections/community.crypto/pull/740). +- luks_device - fixed module a bug that prevented using ``remove_keyslot`` with the value ``0`` (https://github.com/ansible-collections/community.crypto/pull/710). +- luks_device - fixed module falsely outputting ``changed=false`` when trying to add a new slot with a key that is already present in another slot. The module now rejects adding keys that are already present in another slot (https://github.com/ansible-collections/community.crypto/pull/710). +- luks_device - fixed testing of LUKS passphrases in when specifying a keyslot for cryptsetup version 2.0.3. The output of this cryptsetup version slightly differs from later versions (https://github.com/ansible-collections/community.crypto/pull/710). +- openssl_dhparam - was using an internal function instead of the public API to load DH param files when using the ``cryptography`` backend. The internal function was removed in cryptography 42.0.0. The module now uses the public API, which has been available since support for DH params was added to cryptography (https://github.com/ansible-collections/community.crypto/pull/698). +- openssl_privatekey_info - ``check_consistency=true`` no longer works for RSA keys with cryptography 42.0.0+ (https://github.com/ansible-collections/community.crypto/pull/701). +- openssl_privatekey_info - ``check_consistency=true`` now reports a warning if it cannot determine consistency (https://github.com/ansible-collections/community.crypto/pull/705). +- x509_certificate - since community.crypto 2.19.0 the module was no longer idempotent with respect to ``not_before`` and ``not_after`` times. This is now fixed (https://github.com/ansible-collections/community.crypto/issues/753, https://github.com/ansible-collections/community.crypto/pull/754). +- x509_crl, x509_certificate, x509_certificate_info - when parsing absolute timestamps which omitted the second count, the first digit of the minutes was used as a one-digit minutes count, and the second digit of the minutes as a one-digit second count (https://github.com/ansible-collections/community.crypto/pull/745). + +community.digitalocean +~~~~~~~~~~~~~~~~~~~~~~ + +- The C(project_name) parameter for many modules was used by alias C(project) internally in the codebase, but to work properly C(project_name) must be used in the code. Replace self.module.params.get("project") with self.module.params.get("project_name") (https://github.com/ansible-collections/community.digitalocean/issues/326). +- digital_ocean_kubernetes - module didn't return kubeconfig properly, return documentation was invalid. Fixed version returns data with the same structure all the time, also it is aligned with M(community.digitalocean.digital_ocean_kubernetes_info) documentation return data now. (https://github.com/ansible-collections/community.digitalocean/issues/322). +- inventory plugin - restore reading auth token from env variables (https://github.com/ansible-collections/community.digitalocean/pull/315). + +community.dns +~~~~~~~~~~~~~ + +- DNS record modules, inventory plugins - fix the TXT entry encoder to avoid splitting up escape sequences for quotes and backslashes over multiple TXT strings (https://github.com/ansible-collections/community.dns/issues/190, https://github.com/ansible-collections/community.dns/pull/191). +- Update Public Suffix List. +- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX (https://github.com/ansible-collections/community.dns/pull/197). +- nameserver_record_info - fix crash when more than one record is retrieved (https://github.com/ansible-collections/community.dns/pull/172). +- wait_for_txt, nameserver_info, nameserver_record_info - when looking up nameservers for a domain, do not treat ``NXDOMAIN`` as a fatal error (https://github.com/ansible-collections/community.dns/pull/177). + +community.docker +~~~~~~~~~~~~~~~~ + +- Use ``unix:///var/run/docker.sock`` instead of the legacy ``unix://var/run/docker.sock`` as default for ``docker_host`` (https://github.com/ansible-collections/community.docker/pull/736). +- docker and nsenter connection plugins, docker_container_exec module - avoid using the deprecated ``ansible.module_utils.compat.selectors`` module util with Python 3 (https://github.com/ansible-collections/community.docker/issues/870, https://github.com/ansible-collections/community.docker/pull/871). +- docker_compose_v2 - do not consider a ``Waiting`` event as an action/change (https://github.com/ansible-collections/community.docker/pull/804). +- docker_compose_v2 - do not fail when non-fatal errors occur. This can happen when pulling an image fails, but then the image can be built for another service. Docker Compose emits an error in that case, but ``docker compose up`` still completes successfully (https://github.com/ansible-collections/community.docker/issues/807, https://github.com/ansible-collections/community.docker/pull/810, https://github.com/ansible-collections/community.docker/pull/811). +- docker_compose_v2 - do not treat service-level pull events as changes to avoid incorrect ``changed=true`` return value of ``pull=always`` (https://github.com/ansible-collections/community.docker/issues/802, https://github.com/ansible-collections/community.docker/pull/803). +- docker_compose_v2 - properly parse dry-run build events from ``stderr`` (https://github.com/ansible-collections/community.docker/issues/778, https://github.com/ansible-collections/community.docker/pull/779). +- docker_compose_v2* - allow ``project_src`` to be a relative path, by converting it to an absolute path before using it (https://github.com/ansible-collections/community.docker/issues/827, https://github.com/ansible-collections/community.docker/pull/828). +- docker_compose_v2* modules - abort with a nice error message instead of crash when the Docker Compose CLI plugin version is ``dev`` (https://github.com/ansible-collections/community.docker/issues/825, https://github.com/ansible-collections/community.docker/pull/826). +- docker_compose_v2* modules - correctly parse ``Warning`` events emitted by Docker Compose (https://github.com/ansible-collections/community.docker/issues/807, https://github.com/ansible-collections/community.docker/pull/811). +- docker_compose_v2* modules - parse ``logfmt`` warnings emitted by Docker Compose (https://github.com/ansible-collections/community.docker/issues/787, https://github.com/ansible-collections/community.docker/pull/811). +- docker_compose_v2, docker_compose_v2_pull - fix parsing of pull messages for Docker Compose 2.20.0 (https://github.com/ansible-collections/community.docker/issues/785, https://github.com/ansible-collections/community.docker/pull/786). +- docker_compose_v2_pull - fixing idempotence by checking actual pull progress events instead of service-level pull request when ``policy=always``. This stops the module from reporting ``changed=true`` if no actual change happened when pulling. In check mode, it has to assume that a change happens though (https://github.com/ansible-collections/community.docker/issues/813, https://github.com/ansible-collections/community.docker/pull/814). +- docker_compose_v2_pull - the module was documented as part of the ``community.docker.docker`` action group, but was not actually part of it. That has now been fixed (https://github.com/ansible-collections/community.docker/pull/773). +- docker_image - fix archiving idempotency with Docker API 1.44 or later (https://github.com/ansible-collections/community.docker/pull/765). +- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX (https://github.com/ansible-collections/community.docker/pull/835). +- modules and plugins using the Docker SDK for Python - remove ``ssl_version`` from the parameters passed to Docker SDK for Python 7.0.0+. Explicitly fail with a nicer error message if it was explicitly set in this case (https://github.com/ansible-collections/community.docker/pull/715). +- modules and plugins using the Docker SDK for Python - remove ``tls_hostname`` from the parameters passed to Docker SDK for Python 7.0.0+. Explicitly fail with a nicer error message if it was explicitly set in this case (https://github.com/ansible-collections/community.docker/pull/721). +- vendored Docker SDK for Python - avoid passing on ``ssl_version`` and ``tls_hostname`` if they were not provided by the user. Remove dead code. (https://github.com/ansible-collections/community.docker/pull/722). +- vendored Docker SDK for Python - include a fix requests 2.32.2+ compatibility (https://github.com/ansible-collections/community.docker/issues/860, https://github.com/psf/requests/issues/6707, https://github.com/ansible-collections/community.docker/pull/864). +- vendored Docker SDK for Python - include a hotfix for requests 2.32.0 compatibility (https://github.com/ansible-collections/community.docker/issues/860, https://github.com/docker/docker-py/issues/3256, https://github.com/ansible-collections/community.docker/pull/861). + +community.general +~~~~~~~~~~~~~~~~~ + +- aix_filesystem - fix ``_validate_vg`` not passing VG name to ``lsvg_cmd`` (https://github.com/ansible-collections/community.general/issues/8151). +- aix_filesystem - fix issue with empty list items in crfs logic and option order (https://github.com/ansible-collections/community.general/pull/8052). +- apt-rpm - the module did not upgrade packages if a newer version exists. Now the package will be reinstalled if the candidate is newer than the installed version (https://github.com/ansible-collections/community.general/issues/7414). +- apt_rpm - when checking whether packages were installed after running ``apt-get -y install ``, only the last package name was checked (https://github.com/ansible-collections/community.general/pull/8263). +- bitwarden_secrets_manager lookup plugin - implements retry with exponential backoff to avoid lookup errors when Bitwardn's API rate limiting is encountered (https://github.com/ansible-collections/community.general/issues/8230, https://github.com/ansible-collections/community.general/pull/8238). +- cargo - fix idempotency issues when using a custom installation path for packages (using the ``--path`` parameter). The initial installation runs fine, but subsequent runs use the ``get_installed()`` function which did not check the given installation location, before running ``cargo install``. This resulted in a false ``changed`` state. Also the removal of packeges using ``state: absent`` failed, as the installation check did not use the given parameter (https://github.com/ansible-collections/community.general/pull/7970). +- cloudflare_dns - fix Cloudflare lookup of SHFP records (https://github.com/ansible-collections/community.general/issues/7652). +- consul_token - fix token creation without ``accessor_id`` (https://github.com/ansible-collections/community.general/pull/8091). +- cpanm - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- django module utils - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- from_ini filter plugin - disabling interpolation of ``ConfigParser`` to allow converting values with a ``%`` sign (https://github.com/ansible-collections/community.general/issues/8183, https://github.com/ansible-collections/community.general/pull/8185). +- gconftool2_info - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- gitlab_group_members - fix gitlab constants call in ``gitlab_group_members`` module (https://github.com/ansible-collections/community.general/issues/7467). +- gitlab_issue - fix behavior to search GitLab issue, using ``search`` keyword instead of ``title`` (https://github.com/ansible-collections/community.general/issues/7846). +- gitlab_issue, gitlab_label, gitlab_milestone - avoid crash during version comparison when the python-gitlab Python module is not installed (https://github.com/ansible-collections/community.general/pull/8158). +- gitlab_project_members - fix gitlab constants call in ``gitlab_project_members`` module (https://github.com/ansible-collections/community.general/issues/7467). +- gitlab_protected_branches - fix gitlab constants call in ``gitlab_protected_branches`` module (https://github.com/ansible-collections/community.general/issues/7467). +- gitlab_runner - fix pagination when checking for existing runners (https://github.com/ansible-collections/community.general/pull/7790). +- gitlab_user - fix gitlab constants call in ``gitlab_user`` module (https://github.com/ansible-collections/community.general/issues/7467). +- haproxy - fix an issue where HAProxy could get stuck in DRAIN mode when the backend was unreachable (https://github.com/ansible-collections/community.general/issues/8092). +- homebrew - detect already installed formulae and casks using JSON output from ``brew info`` (https://github.com/ansible-collections/community.general/issues/864). +- homebrew - do not fail when brew prints warnings (https://github.com/ansible-collections/community.general/pull/8406, https://github.com/ansible-collections/community.general/issues/7044). +- homebrew - error returned from brew command was ignored and tried to parse empty JSON. Fix now checks for an error and raises it to give accurate error message to users (https://github.com/ansible-collections/community.general/issues/8047). +- hponcfg - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- incus connection plugin - treats ``inventory_hostname`` as a variable instead of a literal in remote connections (https://github.com/ansible-collections/community.general/issues/7874). +- interface_files - also consider ``address_family`` when changing ``option=method`` (https://github.com/ansible-collections/community.general/issues/7610, https://github.com/ansible-collections/community.general/pull/7612). +- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX ((https://github.com/ansible-collections/community.general/issues/8212, https://github.com/ansible-collections/community.general/pull/8225). +- ipa - fix get version regex in IPA module_utils (https://github.com/ansible-collections/community.general/pull/8175). +- ipa_hbacrule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880). +- ipa_otptoken - the module expect ``ipatokendisabled`` as string but the ``ipatokendisabled`` value is returned as a boolean (https://github.com/ansible-collections/community.general/pull/7795). +- ipa_sudorule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880). +- iptables_state - fix idempotency issues when restoring incomplete iptables dumps (https://github.com/ansible-collections/community.general/issues/8029). +- irc - replace ``ssl.wrap_socket`` that was removed from Python 3.12 with code for creating a proper SSL context (https://github.com/ansible-collections/community.general/pull/7542). +- kernel_blacklist - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- keycloak_* - fix Keycloak API client to quote ``/`` properly (https://github.com/ansible-collections/community.general/pull/7641). +- keycloak_authz_permission - resource payload variable for scope-based permission was constructed as a string, when it needs to be a list, even for a single item (https://github.com/ansible-collections/community.general/issues/7151). +- keycloak_client - add sorted ``defaultClientScopes`` and ``optionalClientScopes`` to normalizations (https://github.com/ansible-collections/community.general/pull/8223). +- keycloak_client - fix TypeError when sanitizing the ``saml.signing.private.key`` attribute in the module's diff or state output. The ``sanitize_cr`` function expected a dict where in some cases a list might occur (https://github.com/ansible-collections/community.general/pull/8403). +- keycloak_client - fixes issue when metadata is provided in desired state when task is in check mode (https://github.com/ansible-collections/community.general/issues/1226, https://github.com/ansible-collections/community.general/pull/7881). +- keycloak_identity_provider - ``mappers`` processing was not idempotent if the mappers configuration list had not been sorted by name (in ascending order). Fix resolves the issue by sorting mappers in the desired state using the same key which is used for obtaining existing state (https://github.com/ansible-collections/community.general/pull/7418). +- keycloak_identity_provider - it was not possible to reconfigure (add, remove) ``mappers`` once they were created initially. Removal was ignored, adding new ones resulted in dropping the pre-existing unmodified mappers. Fix resolves the issue by supplying correct input to the internal update call (https://github.com/ansible-collections/community.general/pull/7418). +- keycloak_realm - add normalizations for ``enabledEventTypes`` and ``supportedLocales`` (https://github.com/ansible-collections/community.general/pull/8224). +- keycloak_user - when ``force`` is set, but user does not exist, do not try to delete it (https://github.com/ansible-collections/community.general/pull/7696). +- keycloak_user_federation - fix diff of empty ``krbPrincipalAttribute`` (https://github.com/ansible-collections/community.general/pull/8320). +- ldap - previously the order number (if present) was expected to follow an equals sign in the DN. This makes it so the order number string is identified correctly anywhere within the DN (https://github.com/ansible-collections/community.general/issues/7646). +- linode inventory plugin - add descriptive error message for linode inventory plugin (https://github.com/ansible-collections/community.general/pull/8133). +- locale_gen - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- log_entries callback plugin - replace ``ssl.wrap_socket`` that was removed from Python 3.12 with code for creating a proper SSL context (https://github.com/ansible-collections/community.general/pull/7542). +- lvol - test for output messages in both ``stdout`` and ``stderr`` (https://github.com/ansible-collections/community.general/pull/7601, https://github.com/ansible-collections/community.general/issues/7182). +- merge_variables lookup plugin - fixing cross host merge: providing access to foreign hosts variables to the perspective of the host that is performing the merge (https://github.com/ansible-collections/community.general/pull/8303). +- mksysb - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- modprobe - listing modules files or modprobe files could trigger a FileNotFoundError if ``/etc/modprobe.d`` or ``/etc/modules-load.d`` did not exist. Relevant functions now return empty lists if the directories do not exist to avoid crashing the module (https://github.com/ansible-collections/community.general/issues/7717). +- mssql_script - make the module work with Python 2 (https://github.com/ansible-collections/community.general/issues/7818, https://github.com/ansible-collections/community.general/pull/7821). +- nmcli - fix ``connection.slave-type`` wired to ``bond`` and not with parameter ``slave_type`` in case of connection type ``wifi`` (https://github.com/ansible-collections/community.general/issues/7389). +- ocapi_utils, oci_utils, redfish_utils module utils - replace ``type()`` calls with ``isinstance()`` calls (https://github.com/ansible-collections/community.general/pull/7501). +- onepassword lookup plugin - failed for fields that were in sections and had uppercase letters in the label/ID. Field lookups are now case insensitive in all cases (https://github.com/ansible-collections/community.general/pull/7919). +- onepassword lookup plugin - field and section titles are now case insensitive when using op CLI version two or later. This matches the behavior of version one (https://github.com/ansible-collections/community.general/pull/7564). +- opentelemetry callback plugin - close spans always (https://github.com/ansible-collections/community.general/pull/8367). +- opentelemetry callback plugin - honour the ``disable_logs`` option to avoid storing task results since they are not used regardless (https://github.com/ansible-collections/community.general/pull/8373). +- pacemaker_cluster - actually implement check mode, which the module claims to support. This means that until now the module also did changes in check mode (https://github.com/ansible-collections/community.general/pull/8081). +- pam_limits - when the file does not exist, do not create it in check mode (https://github.com/ansible-collections/community.general/issues/8050, https://github.com/ansible-collections/community.general/pull/8057). +- pipx module utils - change the CLI argument formatter for the ``pip_args`` parameter (https://github.com/ansible-collections/community.general/issues/7497, https://github.com/ansible-collections/community.general/pull/7506). +- pipx_info - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- pkgin - pkgin (pkgsrc package manager used by SmartOS) raises erratic exceptions and spurious ``changed=true`` (https://github.com/ansible-collections/community.general/pull/7971). +- proxmox - fix updating a container config if the setting does not already exist (https://github.com/ansible-collections/community.general/pull/7872). +- proxmox_kvm - fixed status check getting from node-specific API endpoint (https://github.com/ansible-collections/community.general/issues/7817). +- proxmox_kvm - running ``state=template`` will first check whether VM is already a template (https://github.com/ansible-collections/community.general/pull/7792). +- proxmox_pool_member - absent state for type VM did not delete VMs from the pools (https://github.com/ansible-collections/community.general/pull/7464). +- puppet - add option ``environment_lang`` to set the environment language encoding. Defaults to lang ``C``. It is recommended to set it to ``C.UTF-8`` or ``en_US.UTF-8`` depending on what is available on your system. (https://github.com/ansible-collections/community.general/issues/8000) +- redfish_command - fix usage of message parsing in ``SimpleUpdate`` and ``MultipartHTTPPushUpdate`` commands to treat the lack of a ``MessageId`` as no message (https://github.com/ansible-collections/community.general/issues/7465, https://github.com/ansible-collections/community.general/pull/7471). +- redfish_info - allow for a GET operation invoked by ``GetUpdateStatus`` to allow for an empty response body for cases where a service returns 204 No Content (https://github.com/ansible-collections/community.general/issues/8003). +- redfish_info - correct uncaught exception when attempting to retrieve ``Chassis`` information (https://github.com/ansible-collections/community.general/pull/7952). +- redhat_subscription - use the D-Bus registration on RHEL 7 only on 7.4 and + greater; older versions of RHEL 7 do not have it + (https://github.com/ansible-collections/community.general/issues/7622, + https://github.com/ansible-collections/community.general/pull/7624). +- riak - support ``riak admin`` sub-command in newer Riak KV versions beside the legacy ``riak-admin`` main command (https://github.com/ansible-collections/community.general/pull/8211). +- snap - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- snap_alias - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411). +- statusio_maintenance - fix error caused by incorrectly formed API data payload. Was raising "Failed to create maintenance HTTP Error 400 Bad Request" caused by bad data type for date/time and deprecated dict keys (https://github.com/ansible-collections/community.general/pull/7754). +- terraform - fix multiline string handling in complex variables (https://github.com/ansible-collections/community.general/pull/7535). +- to_ini filter plugin - disabling interpolation of ``ConfigParser`` to allow converting values with a ``%`` sign (https://github.com/ansible-collections/community.general/issues/8183, https://github.com/ansible-collections/community.general/pull/8185). +- xml - make module work with lxml 5.1.1, which removed some internals that the module was relying on (https://github.com/ansible-collections/community.general/pull/8169). + +community.grafana +~~~~~~~~~~~~~~~~~ + +- Add `grafana_organiazion_user` to `action_groups.grafana` +- Fixed orgId handling in diff comparison for `grafana_datasource` if using org_name +- Handling of desired default state for first `grafana_datasource` +- Ignore `type` argument for diff comparison if `grafana-postgresq-datasource` alias `postgres` is used +- Set umask for `grafana_plugin` command +- test: replace deprecated `TestCase.assertEquals` to support Python 3.12 +- undo removed deprecated `message` argument in `grafana_dashboard` + +community.hrobot +~~~~~~~~~~~~~~~~ + +- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX (https://github.com/ansible-collections/community.hrobot/pull/102). + +community.mysql +~~~~~~~~~~~~~~~ + +- mysql_info - the ``slave_status`` filter was returning an empty list on MariaDB with multiple replication channels. It now returns all channels by running ``SHOW ALL SLAVES STATUS`` for MariaDB servers (https://github.com/ansible-collections/community.mysql/issues/603). + +community.postgresql +~~~~~~~~~~~~~~~~~~~~ + +- postgresql_db - ``restore`` custom format as file instead of stdin to allow the use of --job flag in ``target_opts`` (https://github.com/ansible-collections/community.postgresql/issues/594). +- postgresql_ext - Reconnect before upgrade to avoid accidental load of the upgraded extension (https://github.com/ansible-collections/community.postgresql/pull/689). +- postgresql_idx - consider schema name when checking for index (https://github.com/ansible-collections/community.postgresql/issues/692). Index names are only unique within a schema. This allows using the same index name in multiple schemas. +- postgresql_privs - Enables the ability to revoke functions from user (https://github.com/ansible-collections/community.postgresql/issues/687). +- postgresql_privs - fix a failure when altering privileges with ``grant_option: true`` (https://github.com/ansible-collections/community.postgresql/issues/668). +- postgresql_query - now reports not changed for queries starting with "SHOW" (https://github.com/ansible-collections/community.postgresql/pull/592). +- postgresql_user - module failed when running against an SQL_ASCII encoded database as the user's current password was returned as bytes as opposed to a str. Fix now checks for this case and decodes the bytes as an ascii encoded string. (https://github.com/ansible-collections/community.postgresql/issues/584). + +community.routeros +~~~~~~~~~~~~~~~~~~ + +- facts - fix date not getting removed for idempotent config export (https://github.com/ansible-collections/community.routeros/pull/262). + +community.sap_libs +~~~~~~~~~~~~~~~~~~ + +- fixes failures in sanity test for all modules + +community.vmware +~~~~~~~~~~~~~~~~ + +- Clarify pyVmomi requirement (https://github.com/ansible-collections/community.vmware/pull/2071). +- Fix InsecureRequestWarning for modules based on the VmwareRestClient module util when setting ``validate_certs`` to ``False`` (https://github.com/ansible-collections/community.vmware/pull/1969). +- Use `isinstance()` instead of `type()` for a typecheck (https://github.com/ansible-collections/community.vmware/pull/2011). +- module_utils/vmware.py - remove ssl.wrap_socet() function. Replaced for code based on ssl.get_server_certificate (https://github.com/ansible-collections/community.vmware/issues/1930). +- vmware_cluster_dpm - Handle case where DPM config has not been initialized yet and is None (https://github.com/ansible-collections/community.vmware/pull/2057). +- vmware_dvs_portgroup - Fix erroneously reporting a change when `port_binding` is static and `num_ports` not specified (https://github.com/ansible-collections/community.vmware/pull/2053). +- vmware_guest - Fix a error while updating the VM by adding a new disk. While adding a disk to an existing VM, it leaves it in invalid state. (https://github.com/ansible-collections/community.vmware/pull/2044). +- vmware_guest - Fix a missing error message while setting a template parameter with inconsistency guest_os ID (https://github.com/ansible-collections/community.vmware/pull/2036). +- vmware_guest - Fix failure of vm reconfiguration with enabled virt_based_security (https://github.com/ansible-collections/community.vmware/pull/1848). +- vmware_vm_info - Fix an AttributeError when gathering network information (https://github.com/ansible-collections/community.vmware/pull/1919). + +community.windows +~~~~~~~~~~~~~~~~~ + +- Remove some code which is no longer valid for dotnet 5+ +- community.windows.win_psmodule_info - exception thrown when host has no Installed Module. Fix now checks that variable $installedModules is not null before calling the .Contains(..) function on it. +- win_format, win_partition - Add support for Windows failover cluster disks +- win_psmodule - Fix up error message with ``state=latest`` +- win_rabbitmq_plugin - Avoid using ``Invoke-Expression`` when running external commands +- win_rds_rap - The module crashed when creating a RAP with Gateway Managed Computer Group (https://github.com/ansible-collections/community.windows/issues/184). +- win_robocopy - Fix up ``cmd`` return value to include the executable ``robocopy`` + +community.zabbix +~~~~~~~~~~~~~~~~ + +- Avoid to update user-directory configuration in dry run. +- api module - Fixed certificiate errors +- proxy and server roles - Defaulted location of fping and fping6 based on OS. +- proxy role - Removed requirement for mysql group definition. +- server role - typo in configuration var StasAllowedIP to StatsAllowedIP +- zabbix-{agent, javagateway, proxy, server, web} - support raspberry pi without repository url specification +- zabbix_agent - Fixed IPMI authentication algorithm default setting +- zabbix_agent - Fixed issue to where scripts can be deployed alongside userparameters +- zabbix_host - Don't reset IPMI setting when update inventory data of a host +- zabbix_host - Finish task with failed if host_group parameter is empty list +- zabbix_inventory - fixed handeling of add_zabbix_groups option +- zabbix_server - proper indentaion of become in selinux.yaml +- zabbix_template - fix template export when template's content has "error" word +- zabbix_web - Added missing semicolon to nginx vhost template. +- zabbix_web role - fix variable naming issues (undefined) to zabbix_web_version and zabbix_web_apt_repository +- zabbix_web role, Add missing selinux.yml tasks. + +containers.podman +~~~~~~~~~~~~~~~~~ + +- Add idempotency for podman_secret module +- Catch exceptions when no JSON output in podman_image +- Fail if systemd generation failed and it's explicitly set +- Fix example name +- Fix idempotency for podman_network +- Fix idempotency when using 0.0.0.0 in ports +- Fix multi-image support for podman_save +- Fix pod info for non-existant pods +- Fix volume inspection by name in podman_volume +- Recreate stopped containers if recreate flag is enabled +- podman_container - Add check and fixed for v5 network diff +- podman_container - Fix pasta networking idempotency for v5 (#728) +- podman_container_exec - Remove unnecessary quotes in podman_container_exec module +- podman_image_info - Fix wrong return data type in podman_image_info +- podman_play - Fix kube play annotations +- podman_pod - Fix broken info of pods in Podman v5 +- podman_pod - Fix pod for Podman v5 +- podman_pod - Fix podman pod v5 broken info issue + +dellemc.enterprise_sonic +~~~~~~~~~~~~~~~~~~~~~~~~ + +- requirements - Update requires_ansible version in meta/runtime.yml to the oldest supported version (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/321). +- sonic_bgp_communities - Fix incorrect "facts" handling for parsing of a BGP community list configured with an empty "members" list (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/319). +- sonic_bgp_neighbors - Fix prefix-limit issue (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/289). +- sonic_interfaces - Add warnings when speed and auto_negotiate is configured at same time (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). +- sonic_interfaces - Fix support for standard naming interfaces (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). +- sonic_interfaces - Prevent configuring speed in port group interfaces (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). +- sonic_stp - Correct the commands list for STP delete state (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/302). + +dellemc.openmanage +~~~~~~~~~~~~~~~~~~ + +- Added support for RAID creation using NVMe disks.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/635) +- Fixed the issue for ignoring the environment variable `NO_PROXY` earlier. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/554) +- For idrac_certificates module, the `email_address` has been made as an optional parameter. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/582). +- Issue is fixed for deploying a new configuration on quick deploy slot when IPv6 is disabled.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/533) +- idrac_network_attributes - Issue(279049) - If unsupported values are provided for the parameter ``ome_network_attributes``, then this module does not provide a correct error message. +- ome_device_network_services - Issue(212681) - The module does not provide a proper error message if unsupported values are provided for the following parameters- port_number, community_name, max_sessions, max_auth_retries, and idle_timeout. +- ome_device_power_settings - Issue(212679) - The module displays the following message if the value provided for the parameter ``power_cap`` is not within the supported range of 0 to 32767, ``Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI.`` +- ome_inventory - The plugin returns 50 results when a group is specified. No results are shown when a group is not specified. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/575). +- redfish_storage_volume is enhanced to support iDRAC8.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/625) + +f5networks.f5_modules +~~~~~~~~~~~~~~~~~~~~~ + +- bigip_gtm_monitor_bigip - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_firepass - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_http - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_https- fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_tcp - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_monitor_tcp_half_open - fixed an issue where IP and port were not applied correctly when creating new monitor. +- bigip_gtm_topology_region - fixed an issue where if multiple states with spaces in values were defined, module would throw invalid command error +- bigip_gtm_topology_region - fixed an issue where states names that contained spaces caused the idempotency to break. +- bigip_ssl_key_cert - fixed an issue where the passphrase was not being properly send to the BIG-IP. + +fortinet.fortimanager +~~~~~~~~~~~~~~~~~~~~~ + +- Added missing enum values for some arguments. +- Change minimum required ansible-core version to 2.14.0 +- Changed revision to v_range to reduce the size of the code. +- Fixed a bug where ansible may skip update incorrectly. +- Fixed the behavior of module fmgr_firewall_internetservicecustom. +- Fixed the behavior of some modules that contain the argument policyid. +- Improved bypass_validation. If you now set bypass_validation to true, it will allow you to send parameters that are not defined in the schema. +- Improved documentation, added description for all "no description" modules. +- Improved documentation. +- Improved example ansible playbooks. +- Improved the logic of fmgr_fact, fmgr_clone, fmgr_rename, fmgr_move. Usage remains unchanged. +- Reduced the size of module_arg_spec in each module. +- Removed most of the sanity test ignores. +- Support FortiManager 7.0.10 +- Supported "state:absent" for all modules end with "_objectmember", "_scopemember", and "_scetionvalue". +- Supported FortiManager 6.4.14, 7.0.11, 7.0.12, 7.2.5. + +fortinet.fortios +~~~~~~~~~~~~~~~~ + +- Fix the issue that ssl-certificate cannot be set in `fortios_firewall_vip` and `fortios_firewall_vip6`. +- Github issue +- mantis issue + +hetzner.hcloud +~~~~~~~~~~~~~~ + +- hcloud inventory - Ensure the API client use a new cache for every *cached session*. +- inventory - Ensure inventory host variables are serializable and can be cached. +- load_balancer_info - Correctly return the `cookie_lifetime` value. +- load_balancer_service - Correctly return the `cookie_lifetime` value. +- primary_ip - Added the missing `auto_delete` field to the return values. +- primary_ip - The `auto_delete` option is now used when creating or updating a Primary IP. +- primary_ip_info - Added the missing `auto_delete` field to the return values. +- server - Do not remove the server from its placement group when the `placement_group` argument is not specified. +- server - Pass an empty string to the `placement_group` argument to remove a server from its placement group. +- server_network - The returned `alias_ips` list is now sorted. + +ibm.qradar +~~~~~~~~~~ + +- A bunch of ansible-lint and ansible-test sanity issues have been fixed. + +ibm.storage_virtualize +~~~~~~~~~~~~~~~~~~~~~~ + +- ibm_svc_info - Command and release mapping to remove errors in gather_subset=all +- ibm_svc_info - Return error in listing entities that require object name + +infoblox.nios_modules +~~~~~~~~~~~~~~~~~~~~~ + +- Fixes environment variable max_results using INFOBLOX_MAX_RESULTS `#209 `_ +- Fixes index error for transform fields in DTC LBDN (auth_zone and Pool) and DTC POOL (servers and monitors) `#209 `_ +- Fixes typo for environment variable INFOBLOX_WAPI_VERSION `#209 `_ + +junipernetworks.junos +~~~~~~~~~~~~~~~~~~~~~ + +- Fix the empty facts list placement +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. +- acls +- fix to gather l2_interfaces facts with default port-mode access. +- initialize facts dictionary with empty containers for respective resources mentioned below +- lldp_global +- lldp_interfaces +- logging_global +- ntp_global +- ospf_interfaces +- ospfv2 +- ospfv3 +- prefix_lists +- routing_instances +- routing_options +- security_policies +- security_policies_global +- security_zones +- snmp_server +- static_routes +- vlans + +kubernetes.core +~~~~~~~~~~~~~~~ + +- Resolve Collections util resource discovery fails when complex subresources present (https://github.com/ansible-collections/kubernetes.core/pull/676). +- align `helmdiff_check()` function commandline rendering with the `deploy()` function (https://github.com/ansible-collections/kubernetes.core/pull/670). +- helm - Put the chart_ref into quotes when running ``helm show chart``, ``helm upgrade`` and ``helm dependency update`` commands (https://github.com/ansible-collections/kubernetes.core/issues/653). +- helm - delete temporary file created when deploying chart with option ``release_values`` set (https://github.com/ansible-collections/kubernetes.core/issues/530). +- helm - expand kubeconfig path with user's home directory for consistency with k8s +- helm - fix issue occurring when uninstalling chart with statues others than ``deployed`` (https://github.com/ansible-collections/kubernetes.core/issues/319). +- helm - fix post_renderer argument breaking the helm deploy_command (https://github.com/ansible-collections/kubernetes.core/pull/586). +- helm - use ``reuse-values`` when running ``helm diff`` command (https://github.com/ansible-collections/kubernetes.core/issues/680). +- helm - use post_renderer when checking ``changed`` status for a helm release (https://github.com/ansible-collections/kubernetes.core/pull/588). +- integrations test helm_kubeconfig - set helm version to v3.10.3 to avoid incompatability with new bitnami charts (https://github.com/ansible-collections/kubernetes.core/pull/670). +- k8s_json_patch - rename action symlink to ensure k8s action plugin is used (https://github.com/ansible-collections/kubernetes.core/pull/652). +- k8s_scale - clean handling of ResourceTimeout exception (https://github.com/ansible-collections/kubernetes.core/issues/583). +- k8s_scale - fix issue when scaling StatefulSets with ``updateStrategy=OnDelete`` (https://github.com/ansible-collections/kubernetes.core/issues/579). + +lowlydba.sqlserver +~~~~~~~~~~~~~~~~~~ + +- Add ActiveStartDate to the compare properties so this item is marked accurately as changed. +- Fixed the formatting of the SPN by updating the backslash to a forward-slash for the $spn var (lowlydba.sqlserver.spn) +- Update documentation for agent_job_schedule to reflect proper input formatting. (https://github.com/lowlydba/lowlydba.sqlserver/pull/229) + +microsoft.ad +~~~~~~~~~~~~ + +- debug_ldap_client - handle failures when attempting to get the krb5 context and default CCache rather than fail with a traceback +- microsoft.ad.group - Support membership lookup of groups that are longer than 20 characters long +- microsoft.ad.membership - Add helpful hint when the failure was due to a missing/invalid ``domain_ou_path`` - https://github.com/ansible-collections/microsoft.ad/issues/88 + +netapp.ontap +~~~~~~~~~~~~ + +- na_ontap_dns - fix issue with modifying DNS servers in REST. +- na_ontap_ems_destination - fix field error with `certificate.name` for ONTAP 9.11.1 or later in REST. +- na_ontap_fpolicy_policy - fixed issue with idempotency in REST. +- na_ontap_igroup_initiator - fixed issue with idempotency. +- na_ontap_nfs - fix error with `windows` in REST for ONTAP 9.10 or earlier. +- na_ontap_quotas - fixed issue with idempotency in REST. +- na_ontap_security_certificates - fix error with ontap_info returned in module output in REST. +- na_ontap_security_config - added warning for missing `supported_cipher_suites` to maintain idempotency in REST. +- na_ontap_snapshot_policy - fix issue with modifying snapshot policy in REST. +- na_ontap_volume - modified `type` to be case insensitive in REST. +- na_ontap_vserver_peer - fix issue with peering multiple clusters with same vserver name in REST. + +netapp.storagegrid +~~~~~~~~~~~~~~~~~~ + +- Removed fetch limit in API request and implemented pagination. + +netbox.netbox +~~~~~~~~~~~~~ + +- Improve error reporting for missing module [#1126](https://github.com/netbox-community/ansible_modules/pull/1126) +- nb_inventory - Fix API cache failure [#1111](https://github.com/netbox-community/ansible_modules/pull/1111) +- nb_lookup - Allow multiple IDs in nb_lookup [#1042](https://github.com/netbox-community/ansible_modules/pull/1042) +- netbox_vlan - Fix documentation of vlan_group [#1138](https://github.com/netbox-community/ansible_modules/pull/1138) + +purestorage.flasharray +~~~~~~~~~~~~~~~~~~~~~~ + +- purefa_cert - Fixed issue where parts of the subject where not included in the CSR if they did not exist in the currently used cert. +- purefa_certs - Allow certificates of over 3000 characters to be imported. +- purefa_dns - Fixed attribute error on deletion of management DNS +- purefa_ds - Fix issue with SDK returning empty data for data directory services even when it does exist +- purefa_host - Allows all current host inititators to be correctly removed +- purefa_host - Fix idempotency issue with connected volume +- purefa_info - Resolved issue with KeyError when LACP bonds are in use +- purefa_inventory - Fix issue with iSCSI-only FlashArrays +- purefa_pg - Allows a protection group to be correctly created when `target` is specified as well as other objects, such as `volumes` or `hosts` +- purefa_pgsched - Fixed issue with disabling schedules +- purefa_pgsnap - Add support for restoring volumes connected to hosts in a host-based protection group and hosts in a hostgroup-based protection group. +- purefa_pgsnap - Fixed incorrect parameter name +- purefa_policy - Fix incorrect call of psot instead of patch for NFS policies +- purefa_volume - Ensure module response for creation of volume and rerun are the same +- purefa_volume - Fix idempotency issue with delete volume + +purestorage.flashblade +~~~~~~~~~~~~~~~~~~~~~~ + +- purefb_bucket - Changed logic to allow complex buckets to be created in a single call, rather than having to split into two tasks. +- purefb_info - Added missing object lock retention details if enabledd +- purefb_lag - Enable LAG port configuration with multi-chassis +- purefb_timeout - Fixed arithmetic error that resulted in module incorrectly reporting changed when no change was required. + +splunk.es +~~~~~~~~~ + +- Fixed argspec validation for plugins with empty task attributes when run with Ansible 2.9. + +telekom_mms.icinga_director +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Fixes #190 - Workaround for service apply bug (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/239) +- change notification interval variable to int-type (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/254) +- set user_groups in notification to empty list (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/255) + +theforeman.foreman +~~~~~~~~~~~~~~~~~~ + +- compute_profile, host - refer to VMware storage pods by name, not id (https://github.com/theforeman/foreman-ansible-modules/issues/1247) +- content_view_filter_rule - handle multiple rules for the same package but different architectures and versions correctly (https://bugzilla.redhat.com/show_bug.cgi?id=2189687) + +vmware.vmware_rest +~~~~~~~~~~~~~~~~~~ + +- content_library_item_info - fixed error with unsupported property +- lookup plugins - Refactor to use native options configuration via doc_fragment, which ensures that vcenter_validate_certs=false is honored (https://github.com/ansible-collections/vmware.vmware_rest/issues/425). + +vultr.cloud +~~~~~~~~~~~ + +- Fixed an error while waiting for a specific state and the API returns an empty response. (https://github.com/vultr/ansible-collection-vultr/issues/108). +- Fixed an issue with waiting for state (https://github.com/vultr/ansible-collection-vultr/pull/102). +- instance - Fixed an issue detecting the instance state returned by the API (https://github.com/vultr/ansible-collection-vultr/pull/89). +- instance_info - Fixed the alias ``name`` being was used on the wrong argument. (https://github.com/vultr/ansible-collection-vultr/issues/105). +- reserved_ip - Fixed an issue which caused the module to fail, also enabled integration tests (https://github.com/vultr/ansible-collection-vultr/issues/92). + +Known Issues +------------ + +community.docker +~~~~~~~~~~~~~~~~ + +- Please note that the fix for requests 2.32.0 included in community.docker 3.10.1 only + fixes problems with the *vendored* Docker SDK for Python code. Modules and plugins that + use Docker SDK for Python can still fail due to the SDK currently being incompatible + with requests 2.32.0. + + If you still experience problems with requests 2.32.0, such as error messages like + ``Not supported URL scheme http+docker``, please restrict requests to ``<2.32.0``. + +dellemc.openmanage +~~~~~~~~~~~~~~~~~~ + +- idrac_diagnostics - Issue(285322) - This module doesn't support export of diagnostics file to HTTP and HTTPS share via SOCKS proxy. +- idrac_firmware - Issue(279282) - This module does not support firmware update using HTTP, HTTPS, and FTP shares with authentication on iDRAC8. +- idrac_network_attributes - Issue(279049) - If unsupported values are provided for the parameter ``ome_network_attributes``, then this module does not provide a correct error message. +- idrac_storage_volume - Issue(290766) - The module will report success instead of showing failure for new virtual creation on the BOSS-N1 controller if a virtual disk is already present on the same controller. +- ome_device_network_services - Issue(212681) - The module does not provide a proper error message if unsupported values are provided for the following parameters- port_number, community_name, max_sessions, max_auth_retries, and idle_timeout. +- ome_device_power_settings - Issue(212679) - The module displays the following message if the value provided for the parameter ``power_cap`` is not within the supported range of 0 to 32767, ``Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI.`` +- ome_device_quick_deploy - Issue(275231) - This module does not deploy a new configuration to a slot that has disabled IPv6. +- ome_diagnostics - Issue(279193) - Export of SupportAssist collection logs to the share location fails on OME version 4.0.0. +- ome_smart_fabric_uplink - Issue(186024) - The module supported by OpenManage Enterprise Modular, however it does not allow the creation of multiple uplinks of the same name. If an uplink is created using the same name as an existing uplink, then the existing uplink is modified. + +New Plugins +----------- + +Become +~~~~~~ + +- community.general.run0 - Systemd's run0. + +Callback +~~~~~~~~ + +- community.general.default_without_diff - The default ansible callback without diff output. +- community.general.timestamp - Adds simple timestamp for each header. + +Connection +~~~~~~~~~~ + +- community.general.incus - Run tasks in Incus instances via the Incus CLI. + +Filter +~~~~~~ + +- ansible.utils.fact_diff - Find the difference between currently set facts +- community.crypto.parse_serial - Convert a serial number as a colon-separated list of hex numbers to an integer +- community.crypto.to_serial - Convert an integer to a colon-separated list of hex numbers +- community.dns.quote_txt - Quotes a string to use as a TXT record entry +- community.dns.unquote_txt - Unquotes a TXT record entry to a string +- community.general.from_ini - Converts INI text input into a dictionary. +- community.general.lists_difference - Difference of lists with a predictive order. +- community.general.lists_intersect - Intersection of lists with a predictive order. +- community.general.lists_symmetric_difference - Symmetric Difference of lists with a predictive order. +- community.general.lists_union - Union of lists with a predictive order. +- community.general.to_ini - Converts a dictionary to the INI file format. +- microsoft.ad.dn_escape - Escape an LDAP DistinguishedName value string. +- microsoft.ad.parse_dn - Parses an LDAP DistinguishedName string into an object. + +Lookup +~~~~~~ + +- community.general.github_app_access_token - Obtain short-lived Github App Access tokens. +- community.general.onepassword_doc - Fetch documents stored in 1Password. + +Test +~~~~ + +- community.general.fqdn_valid - Validates fully-qualified domain names against RFC 1123. + +New Modules +----------- + +amazon.aws +~~~~~~~~~~ + +- amazon.aws.rds_cluster_param_group - Manage RDS cluster parameter groups +- amazon.aws.rds_cluster_param_group_info - Describes the properties of specific RDS cluster parameter group. +- amazon.aws.rds_engine_versions_info - Describes the properties of specific versions of DB engines. + +ansible.netcommon +~~~~~~~~~~~~~~~~~ + +- ansible.netcommon.cli_restore - Restore device configuration to network devices over network_cli + +check_point.mgmt +~~~~~~~~~~~~~~~~ + +- check_point.mgmt.cp_mgmt_add_central_license - Add central license. +- check_point.mgmt.cp_mgmt_central_license_facts - Get central-license objects facts on Checkpoint over Web Services API. +- check_point.mgmt.cp_mgmt_delete_central_license - Delete central license. +- check_point.mgmt.cp_mgmt_distribute_cloud_licenses - Distribute licenses to target CloudGuard gateways. +- check_point.mgmt.cp_mgmt_show_cloud_licenses_usage - Show attached licenses usage. +- check_point.mgmt.cp_mgmt_show_ha_status - Retrieve domain high availability status. + +cisco.ios +~~~~~~~~~ + +- cisco.ios.ios_evpn_evi - Resource module to configure L2VPN EVPN EVI. +- cisco.ios.ios_evpn_global - Resource module to configure L2VPN EVPN. +- cisco.ios.ios_vxlan_vtep - Resource module to configure VXLAN VTEP interface. + +community.aws +~~~~~~~~~~~~~ + +- community.aws.dynamodb_table_info - Returns information about a Dynamo DB table + +community.crypto +~~~~~~~~~~~~~~~~ + +- community.crypto.acme_ari_info - Retrieves ACME Renewal Information (ARI) for a certificate. +- community.crypto.acme_certificate_deactivate_authz - Deactivate all authz for an ACME v2 order. +- community.crypto.acme_certificate_renewal_info - Determine whether a certificate should be renewed or not. +- community.crypto.x509_certificate_convert - Convert X.509 certificates + +community.digitalocean +~~~~~~~~~~~~~~~~~~~~~~ + +- community.digitalocean.digital_ocean_project_resource_info - Gather information about DigitalOcean Project Resources + +community.docker +~~~~~~~~~~~~~~~~ + +- community.docker.docker_compose_v2 - Manage multi-container Docker applications with Docker Compose CLI plugin +- community.docker.docker_compose_v2_pull - Pull a Docker compose project +- community.docker.docker_image_build - Build Docker images using Docker buildx +- community.docker.docker_image_export - Export (archive) Docker images +- community.docker.docker_image_pull - Pull Docker images from registries +- community.docker.docker_image_push - Push Docker images to registries +- community.docker.docker_image_remove - Remove Docker images +- community.docker.docker_image_tag - Tag Docker images with new names and/or tags + +community.general +~~~~~~~~~~~~~~~~~ + +- community.general.consul_acl_bootstrap - Bootstrap ACLs in Consul. +- community.general.consul_auth_method - Manipulate Consul auth methods. +- community.general.consul_binding_rule - Manipulate Consul binding rules. +- community.general.consul_token - Manipulate Consul tokens. +- community.general.django_command - Run Django admin commands. +- community.general.dnf_config_manager - Enable or disable dnf repositories using config-manager. +- community.general.git_config_info - Read git configuration. +- community.general.gitlab_group_access_token - Manages GitLab group access tokens. +- community.general.gitlab_issue - Create, update, or delete GitLab issues. +- community.general.gitlab_label - Creates/updates/deletes GitLab Labels belonging to project or group. +- community.general.gitlab_milestone - Creates/updates/deletes GitLab Milestones belonging to project or group. +- community.general.gitlab_project_access_token - Manages GitLab project access tokens. +- community.general.keycloak_client_rolescope - Allows administration of Keycloak client roles scope to restrict the usage of certain roles to a other specific client applications. +- community.general.keycloak_component_info - Retrive component info in Keycloak. +- community.general.keycloak_realm_rolemapping - Allows administration of Keycloak realm role mappings into groups with the Keycloak API. +- community.general.nomad_token - Manage Nomad ACL tokens. +- community.general.proxmox_node_info - Retrieve information about one or more Proxmox VE nodes. +- community.general.proxmox_storage_contents_info - List content from a Proxmox VE storage. +- community.general.usb_facts - Allows listing information about USB devices. + +community.hashi_vault +~~~~~~~~~~~~~~~~~~~~~ + +- community.hashi_vault.vault_database_connection_configure - Configures the database engine +- community.hashi_vault.vault_database_connection_delete - Delete a Database Connection +- community.hashi_vault.vault_database_connection_read - Returns the configuration settings for a O(connection_name) +- community.hashi_vault.vault_database_connection_reset - Closes a O(connection_name) and its underlying plugin and restarts it with the configuration stored +- community.hashi_vault.vault_database_connections_list - Returns a list of available connections +- community.hashi_vault.vault_database_role_create - Creates or updates a (dynamic) role definition +- community.hashi_vault.vault_database_role_delete - Delete a role definition +- community.hashi_vault.vault_database_role_read - Queries a dynamic role definition +- community.hashi_vault.vault_database_roles_list - Returns a list of available (dynamic) roles +- community.hashi_vault.vault_database_rotate_root_credentials - Rotates the root credentials stored for the database connection. This user must have permissions to update its own password. +- community.hashi_vault.vault_database_static_role_create - Create or update a static role +- community.hashi_vault.vault_database_static_role_get_credentials - Returns the current credentials based on the named static role +- community.hashi_vault.vault_database_static_role_read - Queries a static role definition +- community.hashi_vault.vault_database_static_role_rotate_credentials - Trigger the credential rotation for a static role +- community.hashi_vault.vault_database_static_roles_list - Returns a list of available static roles + +community.zabbix +~~~~~~~~~~~~~~~~ + +- community.zabbix.zabbix_correlation - Create/update/delete Zabbix correlation + +containers.podman +~~~~~~~~~~~~~~~~~ + +- containers.podman.podman_secret_info - Secrets info module + +dellemc.enterprise_sonic +~~~~~~~~~~~~~~~~~~~~~~~~ + +- dellemc.enterprise_sonic.sonic_dhcp_snooping - Manage DHCP Snooping on SONiC +- dellemc.enterprise_sonic.sonic_pki - Manages PKI attributes of Enterprise Sonic +- dellemc.enterprise_sonic.sonic_stp - Manage STP configuration on SONiC + +dellemc.openmanage +~~~~~~~~~~~~~~~~~~ + +- dellemc.openmanage.idrac_diagnostics - This module allows to run and export diagnostics on iDRAC. +- dellemc.openmanage.idrac_license - This module allows to import, export, and delete licenses on iDRAC. +- dellemc.openmanage.idrac_session - Allows you to create and delete the sessions on iDRAC. +- dellemc.openmanage.idrac_storage_volume - Configures the RAID configuration attributes. + +dellemc.powerflex +~~~~~~~~~~~~~~~~~ + +- dellemc.powerflex.fault_set - Manage Fault Sets on Dell PowerFlex +- dellemc.powerflex.resource_group - Manage resource group deployments on Dell PowerFlex + +fortinet.fortimanager +~~~~~~~~~~~~~~~~~~~~~ + +- fortinet.fortimanager.fmgr_diameterfilter_profile - Configure Diameter filter profiles. +- fortinet.fortimanager.fmgr_firewall_accessproxysshclientcert - Configure Access Proxy SSH client certificate. +- fortinet.fortimanager.fmgr_firewall_accessproxysshclientcert_certextension - Configure certificate extension for user certificate. +- fortinet.fortimanager.fmgr_firewall_vip6_quic - QUIC setting. +- fortinet.fortimanager.fmgr_firewall_vip_gslbpublicips - Publicly accessible IP addresses for the FortiGSLB service. +- fortinet.fortimanager.fmgr_sctpfilter_profile - Configure SCTP filter profiles. +- fortinet.fortimanager.fmgr_sctpfilter_profile_ppidfilters - PPID filters list. +- fortinet.fortimanager.fmgr_switchcontroller_managedswitch_vlan - Configure VLAN assignment priority. +- fortinet.fortimanager.fmgr_system_admin_profile_writepasswdprofiles - Profile list. +- fortinet.fortimanager.fmgr_system_admin_profile_writepasswduserlist - User list. +- fortinet.fortimanager.fmgr_system_npu_nputcam - Configure NPU TCAM policies. +- fortinet.fortimanager.fmgr_system_npu_nputcam_data - Data fields of TCAM. +- fortinet.fortimanager.fmgr_system_npu_nputcam_mask - Mask fields of TCAM. +- fortinet.fortimanager.fmgr_system_npu_nputcam_miract - Mirror action of TCAM. +- fortinet.fortimanager.fmgr_system_npu_nputcam_priact - Priority action of TCAM. +- fortinet.fortimanager.fmgr_system_npu_nputcam_sact - Source action of TCAM. +- fortinet.fortimanager.fmgr_system_npu_nputcam_tact - Target action of TCAM. +- fortinet.fortimanager.fmgr_videofilter_keyword - Configure video filter keywords. +- fortinet.fortimanager.fmgr_videofilter_keyword_word - List of keywords. +- fortinet.fortimanager.fmgr_videofilter_profile_filters - YouTube filter entries. +- fortinet.fortimanager.fmgr_videofilter_youtubekey - Configure YouTube API keys. + +hetzner.hcloud +~~~~~~~~~~~~~~ + +- hetzner.hcloud.firewall_resource - Manage Resources a Hetzner Cloud Firewall is applied to. + +infoblox.nios_modules +~~~~~~~~~~~~~~~~~~~~~ + +- infoblox.nios_modules.nios_dtc_monitor_http - Configures the Infoblox NIOS DTC HTTP monitor. +- infoblox.nios_modules.nios_dtc_monitor_icmp - Configures the Infoblox NIOS DTC ICMP monitor +- infoblox.nios_modules.nios_dtc_monitor_pdp - Configures the Infoblox NIOS DTC PDP monitor +- infoblox.nios_modules.nios_dtc_monitor_sip - Configures the Infoblox NIOS DTC SIP monitor +- infoblox.nios_modules.nios_dtc_monitor_snmp - Configures the Infoblox NIOS DTC SNMP monitor +- infoblox.nios_modules.nios_dtc_monitor_tcp - Configures the Infoblox NIOS DTC TCP monitor +- infoblox.nios_modules.nios_dtc_topology - Configures the Infoblox NIOS DTC Topology + +netapp.ontap +~~~~~~~~~~~~ + +- netapp.ontap.na_ontap_cifs_unix_symlink_mapping - NetApp ONTAP module to manage UNIX symbolic link mapping for CIFS clients. +- netapp.ontap.na_ontap_cli_timeout - NetApp ONTAP module to set the CLI inactivity timeout value. +- netapp.ontap.na_ontap_snmp_config - NetApp ONTAP module to modify SNMP configuration. + +netbox.netbox +~~~~~~~~~~~~~ + +- netbox.netbox.netbox_custom_field_choice_set - Create, updates, or removes Custom Field Choice sets +- netbox.netbox.netbox_module_bay - Create, updates, or removes Module Bay +- netbox.netbox.netbox_virtual_disk - Create, updates, or removes a disk from a Virtual Machine + +purestorage.flasharray +~~~~~~~~~~~~~~~~~~~~~~ + +- purestorage.flasharray.purefa_hardware - Manage FlashArray Hardware Identification + +purestorage.flashblade +~~~~~~~~~~~~~~~~~~~~~~ + +- purestorage.flashblade.purefb_hardware - Manage FlashBlade Hardware + +theforeman.foreman +~~~~~~~~~~~~~~~~~~ + +- theforeman.foreman.registration_command - Manage Registration Command +- theforeman.foreman.webhook - Manage Webhooks + +vultr.cloud +~~~~~~~~~~~ + +- vultr.cloud.object_storage - Manages object storages on Vultr + +New Roles +--------- + +- dellemc.openmanage.idrac_user - Role to manage local users of iDRAC. + +Unchanged Collections +--------------------- + +- ansible.posix (still version 1.5.4) +- chocolatey.chocolatey (still version 1.5.1) +- cisco.ucs (still version 1.10.0) +- cloudscale_ch.cloud (still version 2.3.1) +- community.libvirt (still version 1.3.0) +- community.network (still version 5.0.2) +- community.proxysql (still version 1.5.1) +- community.sops (still version 1.6.7) +- cyberark.conjur (still version 1.2.2) +- frr.frr (still version 2.0.2) +- ibm.spectrum_virtualize (still version 2.0.0) +- inspur.sm (still version 2.3.0) +- netapp.cloudmanager (still version 21.22.1) +- netapp_eseries.santricity (still version 1.4.0) +- ngine_io.cloudstack (still version 2.3.0) +- ngine_io.exoscale (still version 1.1.0) +- openvswitch.openvswitch (still version 2.1.1) +- ovirt.ovirt (still version 3.2.0) +- sensu.sensu_go (still version 1.14.0) +- t_systems_mms.icinga_director (still version 2.0.1) +- vyos.vyos (still version 4.1.0) +- wti.remote (still version 1.0.5) diff --git a/CHANGELOG-v9.md b/CHANGELOG-v9.md deleted file mode 100644 index 00795de78..000000000 --- a/CHANGELOG-v9.md +++ /dev/null @@ -1,7019 +0,0 @@ -# Ansible 9 Release Notes - -This changelog describes changes since Ansible 8\.0\.0\. - -- v9\.5\.1 - - Release Summary - - Ansible\-core - - Changed Collections - - Major Changes - - Minor Changes - - Deprecated Features - - Bugfixes - - New Plugins - - New Modules - - Unchanged Collections -- v9\.4\.0 - - Release Summary - - Ansible\-core - - Changed Collections - - Minor Changes - - Deprecated Features - - Security Fixes - - Bugfixes - - New Plugins - - New Modules - - Unchanged Collections -- v9\.3\.0 - - Release Summary - - Ansible\-core - - Changed Collections - - Major Changes - - Minor Changes - - Deprecated Features - - Bugfixes - - New Plugins - - New Modules - - Unchanged Collections -- v9\.2\.0 - - Release Summary - - Added Collections - - Ansible\-core - - Changed Collections - - Major Changes - - Minor Changes - - Deprecated Features - - Security Fixes - - Bugfixes - - Known Issues - - New Plugins - - New Modules - - Unchanged Collections -- v9\.1\.0 - - Release Summary - - Ansible\-core - - Changed Collections - - Minor Changes - - Breaking Changes / Porting Guide - - Security Fixes - - Bugfixes - - Known Issues - - New Plugins - - New Modules - - Unchanged Collections -- v9\.0\.1 - - Release Summary - - Ansible\-core - - Bugfixes - - Unchanged Collections -- v9\.0\.0 - - Release Summary - - Removed Collections - - Added Collections - - Ansible\-core - - Included Collections - - Major Changes - - Minor Changes - - Breaking Changes / Porting Guide - - Deprecated Features - - Removed Features \(previously deprecated\) - - Security Fixes - - Bugfixes - - Known Issues - - New Plugins - - New Modules - - New Roles - - Unchanged Collections - - -## v9\.5\.1 - -- Release Summary -- Ansible\-core -- Changed Collections -- Major Changes - - containers\.podman - - fortinet\.fortios -- Minor Changes - - amazon\.aws - - cisco\.aci - - cisco\.dnac - - cisco\.meraki - - cisco\.mso - - community\.aws - - community\.crypto - - community\.docker - - community\.general - - community\.rabbitmq - - community\.routeros - - community\.vmware - - containers\.podman - - dellemc\.powerflex - - netapp\.ontap - - purestorage\.flashblade -- Deprecated Features - - community\.crypto - - community\.general - - community\.vmware -- Bugfixes - - Ansible\-core - - amazon\.aws - - cisco\.aci - - cisco\.ise - - cisco\.mso - - community\.aws - - community\.crypto - - community\.dns - - community\.docker - - community\.general - - community\.hrobot - - community\.vmware - - containers\.podman - - fortinet\.fortios - - netapp\.ontap -- New Plugins - - Filter -- New Modules - - community\.aws - - community\.crypto - - community\.general - - dellemc\.powerflex -- Unchanged Collections - - -### Release Summary - -Release Date\: 2024\-04\-24 - -[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) - -Please note that this release replaces a mistakenly released 9\.5\.0 that included a breaking change\. The 9\.5\.0 release has been yanked from PyPI and is not part of the official release history\. - - -### Ansible\-core - -Ansible 9\.5\.1 contains ansible\-core version 2\.16\.6\. -This is a newer version than version 2\.16\.5 contained in the previous Ansible release\. - -The changes are reported in the combined changelog below\. - - -### Changed Collections - -If not mentioned explicitly\, the changes are reported in the combined changelog below\. - -| Collection | Ansible 9.4.0 | Ansible 9.5.1 | Notes | -| ---------------------------------------- | ------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| amazon.aws | 7.4.0 | 7.5.0 | | -| cisco.aci | 2.8.0 | 2.9.0 | | -| cisco.dnac | 6.13.1 | 6.13.3 | | -| cisco.intersight | 2.0.7 | 2.0.8 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| cisco.ise | 2.8.0 | 2.8.1 | | -| cisco.meraki | 2.17.2 | 2.18.0 | | -| cisco.mso | 2.5.0 | 2.6.0 | | -| community.aws | 7.1.0 | 7.2.0 | | -| community.crypto | 2.18.0 | 2.19.0 | | -| community.dns | 2.8.3 | 2.9.0 | | -| community.docker | 3.8.1 | 3.9.0 | | -| community.general | 8.5.0 | 8.6.0 | | -| community.hrobot | 1.9.1 | 1.9.2 | | -| community.library_inventory_filtering_v1 | 1.0.0 | 1.0.1 | | -| community.mongodb | 1.7.2 | 1.7.3 | There are no changes recorded in the changelog. | -| community.rabbitmq | 1.2.3 | 1.3.0 | | -| community.routeros | 2.14.0 | 2.15.0 | | -| community.vmware | 4.2.0 | 4.3.0 | | -| containers.podman | 1.12.0 | 1.13.0 | | -| dellemc.powerflex | 2.2.0 | 2.3.0 | | -| fortinet.fortios | 2.3.5 | 2.3.6 | | -| infinidat.infinibox | 1.4.3 | 1.4.5 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| netapp.ontap | 22.10.0 | 22.11.0 | | -| purestorage.flashblade | 1.16.0 | 1.17.0 | | - - -### Major Changes - - -#### containers\.podman - -* Add quadlet support for Podman modules - - -#### fortinet\.fortios - -* Add notes for backup modules in the documentation in both monitor and monitor\_fact modules\. -* Supported new FOS versions 7\.4\.2 and 7\.4\.3\, and support data type mac\_address in the collection\. -* Update the documentation for the supported versions from latest to a fix version number\. -* Update the required ansible version to 2\.15\. - - -### Minor Changes - - -#### amazon\.aws - -* iam\_user\_info \- Add login\_profile to return info that is get from a user\, to know if they can login from AWS console \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2012](https\://github\.com/ansible\-collections/amazon\.aws/pull/2012)\)\. -* module\_utils\.iam \- refactored normalization functions to use boto3\_resource\_to\_ansible\_dict\(\) and boto3\_resource\_list\_to\_ansible\_dict\(\) \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2006](https\://github\.com/ansible\-collections/amazon\.aws/pull/2006)\)\. -* module\_utils\.transformations \- add boto3\_resource\_to\_ansible\_dict\(\) and boto3\_resource\_list\_to\_ansible\_dict\(\) helpers \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2006](https\://github\.com/ansible\-collections/amazon\.aws/pull/2006)\)\. - - -#### cisco\.aci - -* Add Authentification option for EIGRP interface profile\. -* Add L3out Floating SVI modules \(aci\_l3out\_floating\_svi\, aci\_l3out\_floating\_svi\_path\, aci\_l3out\_floating\_svi\_path\_secondary\_ip and aci\_l3out\_floating\_svi\_secondary\_ip\) \(\#478\) -* Add No\-verification flag option to reduce the number of API calls\. If true\, a verifying GET will not be sent after a POST update to APIC -* Add access spine interface selector and port block binding in aci\_access\_port\_block\_to\_access\_port -* Add aci\_access\_spine\_interface\_selector module -* Add aci\_action\_rule\_additional\_communities module -* Add aci\_action\_rule\_set\_as\_path and aci\_action\_rule\_set\_as\_path\_asn modules -* Add aci\_bgp\_peer\_prefix\_policy\, aci\_bgp\_route\_summarization\_policy and aci\_bgp\_address\_family\_context\_policy modules -* Add aci\_fabric\_pod\, aci\_fabric\_pod\_external\_tep\, aci\_fabric\_pod\_profile\, aci\_fabric\_pod\_remote\_pool modules \(\#558\) -* Add aci\_hsrp\_interface\_policy\, aci\_l3out\_hsrp\_group\, aci\_l3out\_hsrp\_interface\_profile and aci\_l3out\_hsrp\_secondary\_vip modules \(\#505\) -* Add aci\_interface\_policy\_eigrp \(class\:eigrpIfPol\) module -* Add aci\_interface\_policy\_pim module -* Add aci\_interface\_policy\_storm\_control module -* Add aci\_keychain\_policy and aci\_key\_policy modules -* Add aci\_l3out\_bfd\_multihop\_interface\_profile\, aci\_l3out\_bfd\_interface\_profile\, aci\_interface\_policy\_bfd\_multihop\, aci\_interface\_policy\_bfd and aci\_bfd\_multihop\_node\_policy modules \(\#492\) -* Add aci\_l3out\_dhcp\_relay\_label\, aci\_dhcp\_option\_policy and aci\_dhcp\_option modules -* Add aci\_l3out\_eigrp\_interface\_profile module -* Add aci\_listify filter plugin to flattens nested dictionaries -* Add aci\_netflow\_exporter\_policy module -* Add aci\_netflow\_monitor\_policy and aci\_netflow\_record\_policy modules -* Add aci\_netflow\_monitor\_to\_exporter module -* Add aci\_node\_block module -* Add aci\_pim\_route\_map\_policy and aci\_pim\_route\_map\_entry modules -* Add aci\_qos\_custom\_policy and aci\_qos\_dscp\_class modules -* Add aci\_qos\_dot1p\_class module -* Add action rules attributes to aci\_tenant\_action\_rule\_profile\. -* Add auto to speed attribute options in aci\_interface\_policy\_link\_level module \(\#577\) -* Add missing options to aci\_bd module -* Add modules aci\_bd\_to\_netflow\_monitor\_policy and aci\_bd\_rogue\_exception\_mac \(\#600\) -* Add modules for Fabric External Connection Policies and its childs -* Add option to set delimiter to \_ in aci\_epg\_to\_domain module -* Add qos\_custom\_policy\, pim\_interface\_policy and igmp\_interface\_policy as new child\_classes for aci\_l3out\_logical\_interface\_profile\. -* Add support for annotation in aci\_rest module \(\#437\) -* Add support for block statements in useg attributes with the aci\_epg\_useg\_attribute\_block\_statement module -* Add support for configuration of access switch policy groups with aci\_access\_switch\_policy\_group module -* Add support for configuration of certificate authorities in aci\_aaa\_certificate\_authority -* Add support for configuration of fabric management access policies in aci\_fabric\_management\_access -* Add support for configuration of vrf multicast with aci\_vrf\_multicast module -* Add support for configuring Azure cloud subnets using the aci\_cloud\_subnet module -* Add support for encap scope in aci\_l3out\_interface -* Add support for https ssl cipher configuration in aci\_fabric\_management\_access\_https\_cipher -* Add support for infra l3out nodes bgp\-evpn loopback\, mpls transport loopback and segment id in aci\_l3out\_logical\_node -* Add support for infra sr mpls micro bfd in aci\_l3out\_interface -* Add support for intra epg\, taboo\, and contract interface in aci\_epg\_to\_contract -* Add support for key ring configuration in aci\_aaa\_key\_ring -* Add support for mac and description in aci\_l3out\_interface -* Add support for mpls custom qos policy for infra sr mpls l3outs node profiles in aci\_l3out\_logical\_node\_profile -* Add support for security default settings configuration in aci\_aaa\_security\_default\_settings -* Add support for simple statements in useg attributes with the aci\_epg\_useg\_attribute\_simple\_statement module -* Add support for sr\-mpls bgpInfraPeerP and bgp\_password in aci\_l3out\_bgp\_peer module \(\#543\) -* Add support for sr\-mpls in aci\_l3out module -* Add support for sr\-mpls l3out to infra l3out in aci\_l3out\_to\_sr\_mpls\_infra\_l3out -* Add support for subject labels for EPG\, EPG Contract\, ESG\, Contract Subject\, L2Out External EPG\, L3out External EPG\, and L3out External EPG Contract with the aci\_subject\_label module -* Add support for taboo contract\, contract interface and intra\_epg contract in aci\_l3out\_extepg\_to\_contract -* Add support for useg default block statement configuration for useg epg in aci\_epg -* Modify child class node block conditions to be optional in aci\_switch\_leaf\_selector - - -#### cisco\.dnac - -* Added a method to validate IP addresses\. -* Added the op\_modifies\=True when calling SDK APIs in the workflow manager modules\. -* Adding support to importing a template using JSON file -* Changes in discovery workflow manager modules relating to different states of the discovery job -* Changes in inventory and swim workflow manager modules\. -* Fixed a minor issue in the site workflow manager module\. -* Updating galaxy\.yml ansible\.utils dependencies\. - - -#### cisco\.meraki - -* Ansible collection now support v1\.44\.1 of Dashboard Api\. -* administered\_licensing\_subscription\_entitlements\_info \- new plugin\. -* administered\_licensing\_subscription\_subscriptions\_bind \- new plugin\. -* administered\_licensing\_subscription\_subscriptions\_claim \- new plugin\. -* administered\_licensing\_subscription\_subscriptions\_claim\_key\_validate \- new plugin\. -* administered\_licensing\_subscription\_subscriptions\_compliance\_statuses\_info \- new plugin\. -* administered\_licensing\_subscription\_subscriptions\_info \- new plugin\. -* devices\_appliance\_radio\_settings \- new plugin\. -* devices\_appliance\_radio\_settings\_info \- new plugin\. -* devices\_live\_tools\_arp\_table \- new plugin\. -* devices\_live\_tools\_arp\_table\_info \- new plugin\. -* devices\_live\_tools\_cable\_test \- new plugin\. -* devices\_live\_tools\_cable\_test\_info \- new plugin\. -* devices\_live\_tools\_throughput\_test \- new plugin\. -* devices\_live\_tools\_throughput\_test\_info \- new plugin\. -* devices\_live\_tools\_wake\_on\_lan \- new plugin\. -* devices\_live\_tools\_wake\_on\_lan\_info \- new plugin\. -* devices\_wireless\_alternate\_management\_interface\_ipv6 \- new plugin\. -* networks\_appliance\_rf\_profiles \- new plugin\. -* networks\_appliance\_rf\_profiles\_info \- new plugin\. -* networks\_appliance\_traffic\_shaping\_vpn\_exclusions \- new plugin\. -* networks\_sm\_devices\_install\_apps \- new plugin\. -* networks\_sm\_devices\_reboot \- new plugin\. -* networks\_sm\_devices\_shutdown \- new plugin\. -* networks\_sm\_devices\_uninstall\_apps \- new plugin\. -* networks\_vlan\_profiles \- new plugin\. -* networks\_vlan\_profiles\_assignments\_by\_device\_info \- new plugin\. -* networks\_vlan\_profiles\_assignments\_reassign \- new plugin\. -* networks\_vlan\_profiles\_info \- new plugin\. -* networks\_wireless\_ethernet\_ports\_profiles \- new plugin\. -* networks\_wireless\_ethernet\_ports\_profiles\_assign \- new plugin\. -* networks\_wireless\_ethernet\_ports\_profiles\_info \- new plugin\. -* networks\_wireless\_ethernet\_ports\_profiles\_set\_default \- new plugin\. -* organizations\_appliance\_traffic\_shaping\_vpn\_exclusions\_by\_network\_info \- new plugin\. -* organizations\_appliance\_uplinks\_statuses\_overview\_info \- new plugin\. -* organizations\_appliance\_uplinks\_usage\_by\_network\_info \- new plugin\. -* organizations\_camera\_boundaries\_areas\_by\_device\_info \- new plugin\. -* organizations\_camera\_boundaries\_lines\_by\_device\_info \- new plugin\. -* organizations\_camera\_detections\_history\_by\_boundary\_by\_interval\_info \- new plugin\. -* organizations\_camera\_permissions\_info \- new plugin\. -* organizations\_camera\_roles \- new plugin\. -* organizations\_camera\_roles\_info \- new plugin\. -* organizations\_devices\_availabilities\_change\_history\_info \- new plugin\. -* organizations\_devices\_boots\_history\_info \- new plugin\. -* organizations\_sm\_admins\_roles \- new plugin\. -* organizations\_sm\_admins\_roles\_info \- new plugin\. -* organizations\_sm\_sentry\_policies\_assignments \- new plugin\. -* organizations\_sm\_sentry\_policies\_assignments\_by\_network\_info \- new plugin\. -* organizations\_summary\_top\_networks\_by\_status\_info \- new plugin\. -* organizations\_webhooks\_callbacks\_statuses\_info \- new plugin\. -* organizations\_wireless\_devices\_channel\_utilization\_by\_device\_info \- new plugin\. -* organizations\_wireless\_devices\_channel\_utilization\_by\_network\_info \- new plugin\. -* organizations\_wireless\_devices\_channel\_utilization\_history\_by\_device\_by\_interval\_info \- new plugin\. -* 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\. - - -#### cisco\.mso - -* Add Azure Cloud site support to mso\_schema\_site\_contract\_service\_graph -* Add Azure Cloud site support to mso\_schema\_site\_service\_graph -* Add functionality to resolve same name in remote and local user\. -* Add l3out\_template and l3out\_schema arguments to mso\_schema\_site\_external\_epg \(\#394\) -* Add mso\_schema\_site\_contract\_service\_graph module to manage site contract service graph -* Add mso\_schema\_site\_contract\_service\_graph\_listener module to manage Azure site contract service graph listeners and update other modules -* Add new parameter remote\_user to add multiple remote users associated with multiple login domains -* Add support for replacing all existing contracts with new provided contracts in a single operation with one request and adding/removing multiple contracts in multiple operations with a single request in mso\_schema\_template\_anp\_epg\_contract module -* Add support for replacing all existing static ports with new provided static ports in a single operation with one request and adding/removing multiple static ports in multiple operations with a single request in mso\_schema\_template\_anp\_epg\_staticport module -* Add support for required attributes introduced in NDO 4\.2 for mso\_schema\_site\_anp\_epg\_domain -* Support for creation of schemas without templates with the mso\_schema module - - -#### community\.aws - -* glue\_job \- add support for 2 new instance types which are G\.4X and G\.8X \([https\://github\.com/ansible\-collections/community\.aws/pull/2048](https\://github\.com/ansible\-collections/community\.aws/pull/2048)\)\. -* msk\_cluster \- Support for additional m5 and m7g types of MSK clusters \([https\://github\.com/ansible\-collections/community\.aws/pull/1947](https\://github\.com/ansible\-collections/community\.aws/pull/1947)\)\. - - -#### community\.crypto - -* When using cryptography \>\= 42\.0\.0\, use offset\-aware datetime\.datetime objects \(with timezone UTC\) instead of offset\-naive UTC timestamps \([https\://github\.com/ansible\-collections/community\.crypto/issues/726](https\://github\.com/ansible\-collections/community\.crypto/issues/726)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/727](https\://github\.com/ansible\-collections/community\.crypto/pull/727)\)\. -* openssh\_cert \- avoid UTC functions deprecated in Python 3\.12 when using Python 3 \([https\://github\.com/ansible\-collections/community\.crypto/pull/727](https\://github\.com/ansible\-collections/community\.crypto/pull/727)\)\. - - -#### community\.docker - -* The EE requirements now include PyYAML\, since the docker\_compose\_v2\* modules depend on it when the definition option is used\. This should not have a noticable effect on generated EEs since ansible\-core itself depends on PyYAML as well\, and ansible\-builder explicitly ignores this dependency \([https\://github\.com/ansible\-collections/community\.docker/pull/832](https\://github\.com/ansible\-collections/community\.docker/pull/832)\)\. -* docker\_compose\_v2\* \- the new option check\_files\_existing allows to disable the check for one of the files compose\.yaml\, compose\.yml\, docker\-compose\.yaml\, and docker\-compose\.yml in project\_src if files is not specified\. This is necessary if a non\-standard compose filename is specified through other means\, like the COMPOSE\_FILE environment variable \([https\://github\.com/ansible\-collections/community\.docker/issues/838](https\://github\.com/ansible\-collections/community\.docker/issues/838)\, [https\://github\.com/ansible\-collections/community\.docker/pull/839](https\://github\.com/ansible\-collections/community\.docker/pull/839)\)\. -* docker\_compose\_v2\* modules \- allow to provide an inline definition of the compose content instead of having to provide a project\_src directory with the compose file written into it \([https\://github\.com/ansible\-collections/community\.docker/issues/829](https\://github\.com/ansible\-collections/community\.docker/issues/829)\, [https\://github\.com/ansible\-collections/community\.docker/pull/832](https\://github\.com/ansible\-collections/community\.docker/pull/832)\)\. -* vendored Docker SDK for Python \- remove unused code that relies on functionality deprecated in Python 3\.12 \([https\://github\.com/ansible\-collections/community\.docker/pull/834](https\://github\.com/ansible\-collections/community\.docker/pull/834)\)\. - - -#### community\.general - -* Use offset\-aware datetime\.datetime objects \(with timezone UTC\) instead of offset\-naive UTC timestamps\, which are deprecated in Python 3\.12 \([https\://github\.com/ansible\-collections/community\.general/pull/8222](https\://github\.com/ansible\-collections/community\.general/pull/8222)\)\. -* apt\_rpm \- add new states latest and present\_not\_latest\. The value latest is equivalent to the current behavior of present\, which will upgrade a package if a newer version exists\. present\_not\_latest does what most users would expect present to do\: it does not upgrade if the package is already installed\. The current behavior of present will be deprecated in a later version\, and eventually changed to that of present\_not\_latest \([https\://github\.com/ansible\-collections/community\.general/issues/8217](https\://github\.com/ansible\-collections/community\.general/issues/8217)\, [https\://github\.com/ansible\-collections/community\.general/pull/8247](https\://github\.com/ansible\-collections/community\.general/pull/8247)\)\. -* bitwarden lookup plugin \- add support to filter by organization ID \([https\://github\.com/ansible\-collections/community\.general/pull/8188](https\://github\.com/ansible\-collections/community\.general/pull/8188)\)\. -* filesystem \- add bcachefs support \([https\://github\.com/ansible\-collections/community\.general/pull/8126](https\://github\.com/ansible\-collections/community\.general/pull/8126)\)\. -* ini\_file \- add an optional parameter section\_has\_values\. If the target ini file contains more than one section\, use section\_has\_values to specify which one should be updated \([https\://github\.com/ansible\-collections/community\.general/pull/7505](https\://github\.com/ansible\-collections/community\.general/pull/7505)\)\. -* java\_cert \- add cert\_content argument \([https\://github\.com/ansible\-collections/community\.general/pull/8153](https\://github\.com/ansible\-collections/community\.general/pull/8153)\)\. -* keycloak\_client\, keycloak\_clientscope\, keycloak\_clienttemplate \- added docker\-v2 protocol support\, enhancing alignment with Keycloak\'s protocol options \([https\://github\.com/ansible\-collections/community\.general/issues/8215](https\://github\.com/ansible\-collections/community\.general/issues/8215)\, [https\://github\.com/ansible\-collections/community\.general/pull/8216](https\://github\.com/ansible\-collections/community\.general/pull/8216)\)\. -* nmcli \- adds OpenvSwitch support with new type values ovs\-port\, ovs\-interface\, and ovs\-bridge\, and new slave\_type value ovs\-port \([https\://github\.com/ansible\-collections/community\.general/pull/8154](https\://github\.com/ansible\-collections/community\.general/pull/8154)\)\. -* osx\_defaults \- add option check\_types to enable changing the type of existing defaults on the fly \([https\://github\.com/ansible\-collections/community\.general/pull/8173](https\://github\.com/ansible\-collections/community\.general/pull/8173)\)\. -* passwordstore lookup \- add missing\_subkey parameter defining the behavior of the lookup when a passwordstore subkey is missing \([https\://github\.com/ansible\-collections/community\.general/pull/8166](https\://github\.com/ansible\-collections/community\.general/pull/8166)\)\. -* portage \- adds the possibility to explicitely tell portage to write packages to world file \([https\://github\.com/ansible\-collections/community\.general/issues/6226](https\://github\.com/ansible\-collections/community\.general/issues/6226)\, [https\://github\.com/ansible\-collections/community\.general/pull/8236](https\://github\.com/ansible\-collections/community\.general/pull/8236)\)\. -* redfish\_command \- add command ResetToDefaults to reset manager to default state \([https\://github\.com/ansible\-collections/community\.general/issues/8163](https\://github\.com/ansible\-collections/community\.general/issues/8163)\)\. -* redfish\_info \- add boolean return value MultipartHttpPush to GetFirmwareUpdateCapabilities \([https\://github\.com/ansible\-collections/community\.general/issues/8194](https\://github\.com/ansible\-collections/community\.general/issues/8194)\, [https\://github\.com/ansible\-collections/community\.general/pull/8195](https\://github\.com/ansible\-collections/community\.general/pull/8195)\)\. -* ssh\_config \- allow accept\-new as valid value for strict\_host\_key\_checking \([https\://github\.com/ansible\-collections/community\.general/pull/8257](https\://github\.com/ansible\-collections/community\.general/pull/8257)\)\. - - -#### community\.rabbitmq - -* rabbitmq\_user \- add support to user manipulation through RabbitMQ API \([https\://github\.com/ansible\-collections/community\.rabbitmq/issues/76](https\://github\.com/ansible\-collections/community\.rabbitmq/issues/76)\) - - -#### community\.routeros - -* api\_info\, api\_modify \- Add RouterOS 7\.x support to /mpls ldp path \([https\://github\.com/ansible\-collections/community\.routeros/pull/271](https\://github\.com/ansible\-collections/community\.routeros/pull/271)\)\. -* api\_info\, api\_modify \- add /ip route rule path for RouterOS 6\.x \([https\://github\.com/ansible\-collections/community\.routeros/pull/278](https\://github\.com/ansible\-collections/community\.routeros/pull/278)\)\. -* api\_info\, api\_modify \- add /routing filter path for RouterOS 6\.x \([https\://github\.com/ansible\-collections/community\.routeros/pull/279](https\://github\.com/ansible\-collections/community\.routeros/pull/279)\)\. -* api\_info\, api\_modify \- add default value for from\-pool field in /ipv6 address \([https\://github\.com/ansible\-collections/community\.routeros/pull/270](https\://github\.com/ansible\-collections/community\.routeros/pull/270)\)\. -* api\_info\, api\_modify \- add missing path /interface pppoe\-server server \([https\://github\.com/ansible\-collections/community\.routeros/pull/273](https\://github\.com/ansible\-collections/community\.routeros/pull/273)\)\. -* api\_info\, api\_modify \- add missing path /ip dhcp\-relay \([https\://github\.com/ansible\-collections/community\.routeros/pull/276](https\://github\.com/ansible\-collections/community\.routeros/pull/276)\)\. -* api\_info\, api\_modify \- add missing path /queue simple \([https\://github\.com/ansible\-collections/community\.routeros/pull/269](https\://github\.com/ansible\-collections/community\.routeros/pull/269)\)\. -* api\_info\, api\_modify \- add missing path /queue type \([https\://github\.com/ansible\-collections/community\.routeros/pull/274](https\://github\.com/ansible\-collections/community\.routeros/pull/274)\)\. -* api\_info\, api\_modify \- add missing paths /routing bgp aggregate\, /routing bgp network and /routing bgp peer \([https\://github\.com/ansible\-collections/community\.routeros/pull/277](https\://github\.com/ansible\-collections/community\.routeros/pull/277)\)\. -* api\_info\, api\_modify \- add support for paths /mpls interface\, /mpls ldp accept\-filter\, /mpls ldp advertise\-filter and mpls ldp interface \([https\://github\.com/ansible\-collections/community\.routeros/pull/272](https\://github\.com/ansible\-collections/community\.routeros/pull/272)\)\. - - -#### community\.vmware - -* Document that all parameters and VMware object names are case sensitive \([https\://github\.com/ansible\-collections/community\.vmware/issues/2019](https\://github\.com/ansible\-collections/community\.vmware/issues/2019)\)\. -* Drop the outdated \(and actually unmaintained\) scenario guides \([https\://github\.com/ansible\-collections/community\.vmware/pull/2022](https\://github\.com/ansible\-collections/community\.vmware/pull/2022)\)\. -* vmware\_dvswitch \- Add switchIpAddress/switch\_ip parameter for netflow config -* vmware\_guest\_tools\_info \- Use toolsVersionStatus2 instead of toolsVersionStatus \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\. - - -#### containers\.podman - -* CI \- Fix rootfs test in CI -* CI \- add custom podman path to tasks -* CI \- add parametrized executables to tests -* podman\_container \- Add pasta as default network mode after v5 -* podman\_container\_exec \- Return data for podman exec module -* podman\_generate\_systemd \- Fix broken example for podman\_generate\_systemd \(\#708\) -* podman\_login \- Update podman\_login\.py -* podman\_play \- Add support for kube yaml files with multi\-documents \(\#724\) -* podman\_play \- Update the logic for deleting pods/containers in podman\_play -* podman\_pod\_info \- handle return being list in Podman 5 \(\#713\) - - -#### dellemc\.powerflex - -* Added support for PowerFlex ansible modules and roles on Azure\. -* Added support for resource group provisioning to validate\, deploy\, edit\, add nodes and delete a resource group\. -* The Info module is enhanced to list the firmware repositories\. - - -#### netapp\.ontap - -* na\_ontap\_cifs \- new option offline\_files added in REST\, requires ONTAP 9\.10 or later\. -* na\_ontap\_net\_ifgrp \- updated documentation for parameter name\. -* na\_ontap\_vserver\_audit \- new options schedule\.\* added under log\.rotation\, requires ONTAP 9\.6 or later\. - - -#### purestorage\.flashblade - -* purefb\_bucket \- Add support for strict 17a\-4 WORM compliance\. -* purefb\_connect \- Increase Fan\-In and Fan\-Out maximums -* purefb\_fs \- Add group\_ownership parameter from Purity//FB 4\.4\.0\. -* purefb\_info \- Show array network access policy from Purity//FB 4\.4\.0 -* purefb\_policy \- Add support for network access policies from Purity//FB 4\.4\.0 - - -### Deprecated Features - - -#### community\.crypto - -* acme\.backends module utils \- from community\.crypto on\, all implementations of CryptoBackend must override get\_ordered\_csr\_identifiers\(\)\. The current default implementation\, which simply sorts the result of get\_csr\_identifiers\(\)\, will then be removed \([https\://github\.com/ansible\-collections/community\.crypto/pull/725](https\://github\.com/ansible\-collections/community\.crypto/pull/725)\)\. - - -#### community\.general - -* hipchat callback plugin \- the hipchat service has been discontinued and the self\-hosted variant has been End of Life since 2020\. The callback plugin is therefore deprecated and will be removed from community\.general 10\.0\.0 if nobody provides compelling reasons to still keep it \([https\://github\.com/ansible\-collections/community\.general/issues/8184](https\://github\.com/ansible\-collections/community\.general/issues/8184)\, [https\://github\.com/ansible\-collections/community\.general/pull/8189](https\://github\.com/ansible\-collections/community\.general/pull/8189)\)\. - - -#### community\.vmware - -* vmware\_guest\_tools\_info \- vm\_tools\_install\_status will be removed from next major version \(5\.0\.0\) of the collection since the API call that provides this information has been deprecated by VMware\. Use vm\_tools\_running\_status / vm\_tools\_version\_status instead \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\. - - -### Bugfixes - - -#### Ansible\-core - -* Consolidated the list of internal static vars\, centralized them as constant and completed from some missing entries\. -* Fix check for missing \_sub\_plugin attribute in older connection plugins \([https\://github\.com/ansible/ansible/pull/82954](https\://github\.com/ansible/ansible/pull/82954)\) -* Fixes permission for cache json file from 600 to 644 \([https\://github\.com/ansible/ansible/issues/82683](https\://github\.com/ansible/ansible/issues/82683)\)\. -* Slight optimization to hostvars \(instantiate template only once per host\, vs per call to var\)\. -* allow\_duplicates \- fix evaluating if the current role allows duplicates instead of using the initial value from the duplicate\'s cached role\. -* ansible\-config will now properly template defaults before dumping them\. -* ansible\-test ansible\-doc sanity test \- do not remove underscores from plugin names in collections before calling ansible\-doc \([https\://github\.com/ansible/ansible/pull/82574](https\://github\.com/ansible/ansible/pull/82574)\)\. -* async \- Fix bug that stopped running async task in \-\-check when check\_mode\: False was set as a task attribute \- [https\://github\.com/ansible/ansible/issues/82811](https\://github\.com/ansible/ansible/issues/82811) -* blockinfile \- when create\=true is used with a filename without path\, the module crashed \([https\://github\.com/ansible/ansible/pull/81638](https\://github\.com/ansible/ansible/pull/81638)\)\. -* dnf \- fix an issue when cached RPMs were left in the cache directory even when the keepcache setting was unset \([https\://github\.com/ansible/ansible/issues/81954](https\://github\.com/ansible/ansible/issues/81954)\) -* dnf5 \- replace removed API calls -* facts \- add a generic detection for VMware in product name\. -* fetch \- add error message when using dest with a trailing slash that becomes a local directory \- [https\://github\.com/ansible/ansible/issues/82878](https\://github\.com/ansible/ansible/issues/82878) -* find \- do not fail on Permission errors \([https\://github\.com/ansible/ansible/issues/82027](https\://github\.com/ansible/ansible/issues/82027)\)\. -* unarchive modules now uses zipinfo options without relying on implementation defaults\, making it more compatible with all OS/distributions\. -* winrm \- Do not raise another exception during cleanup when a task is timed out \- [https\://github\.com/ansible/ansible/issues/81095](https\://github\.com/ansible/ansible/issues/81095) - - -#### amazon\.aws - -* cloudwatchlogs\_log\_group\_info \- Implement exponential backoff when making API calls to prevent throttling exceptions \([https\://github\.com/ansible\-collections/amazon\.aws/issues/2011](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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1955)\)\. -* s3\_object \- Fix the issue when copying an object with overriding metadata\. \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1991](https\://github\.com/ansible\-collections/amazon\.aws/issues/1991)\)\. - - -#### cisco\.aci - -* Fix auto logout issue in aci connection plugin to keep connection active between tasks -* Fix idempotency for l3out configuration when l3protocol is used in aci\_l3out -* Fix issues with new attributes in aci\_interface\_policy\_leaf\_policy\_group module by adding conditions to include attributes in the payload only when they are specified by the user \(\#578\) -* Fix query in aci\_vmm\_controller - - -#### cisco\.ise - -* ansible\.utils changes to \"\>\=2\.0\.0\,\<5\.0\" in galaxy\.yml dependencies\. - - -#### cisco\.mso - -* Fix TypeError for iteration on NoneType in mso\_schema\_template -* Fixed the useg\_subnet logic in mso\_schema\_template\_anp\_epg\_useg\_attribute - - -#### community\.aws - -* ssm\(connection\) \- fix bucket region logic when region is us\-east\-1 \([https\://github\.com/ansible\-collections/community\.aws/pull/1908](https\://github\.com/ansible\-collections/community\.aws/pull/1908)\)\. - - -#### community\.crypto - -* acme\_certificate \- respect the order of the CNAME and SAN identifiers that are passed on when creating an ACME order \([https\://github\.com/ansible\-collections/community\.crypto/issues/723](https\://github\.com/ansible\-collections/community\.crypto/issues/723)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/725](https\://github\.com/ansible\-collections/community\.crypto/pull/725)\)\. - - -#### community\.dns - -* Update Public Suffix List\. -* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \([https\://github\.com/ansible\-collections/community\.dns/pull/197](https\://github\.com/ansible\-collections/community\.dns/pull/197)\)\. - - -#### community\.docker - -* docker\_compose\_v2\* \- allow project\_src to be a relative path\, by converting it to an absolute path before using it \([https\://github\.com/ansible\-collections/community\.docker/issues/827](https\://github\.com/ansible\-collections/community\.docker/issues/827)\, [https\://github\.com/ansible\-collections/community\.docker/pull/828](https\://github\.com/ansible\-collections/community\.docker/pull/828)\)\. -* docker\_compose\_v2\* modules \- abort with a nice error message instead of crash when the Docker Compose CLI plugin version is dev \([https\://github\.com/ansible\-collections/community\.docker/issues/825](https\://github\.com/ansible\-collections/community\.docker/issues/825)\, [https\://github\.com/ansible\-collections/community\.docker/pull/826](https\://github\.com/ansible\-collections/community\.docker/pull/826)\)\. -* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \([https\://github\.com/ansible\-collections/community\.docker/pull/835](https\://github\.com/ansible\-collections/community\.docker/pull/835)\)\. - - -#### community\.general - -* aix\_filesystem \- fix \_validate\_vg not passing VG name to lsvg\_cmd \([https\://github\.com/ansible\-collections/community\.general/issues/8151](https\://github\.com/ansible\-collections/community\.general/issues/8151)\)\. -* apt\_rpm \- when checking whether packages were installed after running apt\-get \-y install \\, only the last package name was checked \([https\://github\.com/ansible\-collections/community\.general/pull/8263](https\://github\.com/ansible\-collections/community\.general/pull/8263)\)\. -* bitwarden\_secrets\_manager lookup plugin \- implements retry with exponential backoff to avoid lookup errors when Bitwardn\'s API rate limiting is encountered \([https\://github\.com/ansible\-collections/community\.general/issues/8230](https\://github\.com/ansible\-collections/community\.general/issues/8230)\, [https\://github\.com/ansible\-collections/community\.general/pull/8238](https\://github\.com/ansible\-collections/community\.general/pull/8238)\)\. -* from\_ini filter plugin \- disabling interpolation of ConfigParser to allow converting values with a \% sign \([https\://github\.com/ansible\-collections/community\.general/issues/8183](https\://github\.com/ansible\-collections/community\.general/issues/8183)\, [https\://github\.com/ansible\-collections/community\.general/pull/8185](https\://github\.com/ansible\-collections/community\.general/pull/8185)\)\. -* gitlab\_issue\, gitlab\_label\, gitlab\_milestone \- avoid crash during version comparison when the python\-gitlab Python module is not installed \([https\://github\.com/ansible\-collections/community\.general/pull/8158](https\://github\.com/ansible\-collections/community\.general/pull/8158)\)\. -* haproxy \- fix an issue where HAProxy could get stuck in DRAIN mode when the backend was unreachable \([https\://github\.com/ansible\-collections/community\.general/issues/8092](https\://github\.com/ansible\-collections/community\.general/issues/8092)\)\. -* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \(\([https\://github\.com/ansible\-collections/community\.general/issues/8212](https\://github\.com/ansible\-collections/community\.general/issues/8212)\, [https\://github\.com/ansible\-collections/community\.general/pull/8225](https\://github\.com/ansible\-collections/community\.general/pull/8225)\)\. -* ipa \- fix get version regex in IPA module\_utils \([https\://github\.com/ansible\-collections/community\.general/pull/8175](https\://github\.com/ansible\-collections/community\.general/pull/8175)\)\. -* keycloak\_client \- add sorted defaultClientScopes and optionalClientScopes to normalizations \([https\://github\.com/ansible\-collections/community\.general/pull/8223](https\://github\.com/ansible\-collections/community\.general/pull/8223)\)\. -* keycloak\_realm \- add normalizations for enabledEventTypes and supportedLocales \([https\://github\.com/ansible\-collections/community\.general/pull/8224](https\://github\.com/ansible\-collections/community\.general/pull/8224)\)\. -* puppet \- add option environment\_lang to set the environment language encoding\. Defaults to lang C\. It is recommended to set it to C\.UTF\-8 or en\_US\.UTF\-8 depending on what is available on your system\. \([https\://github\.com/ansible\-collections/community\.general/issues/8000](https\://github\.com/ansible\-collections/community\.general/issues/8000)\) -* riak \- support riak admin sub\-command in newer Riak KV versions beside the legacy riak\-admin main command \([https\://github\.com/ansible\-collections/community\.general/pull/8211](https\://github\.com/ansible\-collections/community\.general/pull/8211)\)\. -* to\_ini filter plugin \- disabling interpolation of ConfigParser to allow converting values with a \% sign \([https\://github\.com/ansible\-collections/community\.general/issues/8183](https\://github\.com/ansible\-collections/community\.general/issues/8183)\, [https\://github\.com/ansible\-collections/community\.general/pull/8185](https\://github\.com/ansible\-collections/community\.general/pull/8185)\)\. -* xml \- make module work with lxml 5\.1\.1\, which removed some internals that the module was relying on \([https\://github\.com/ansible\-collections/community\.general/pull/8169](https\://github\.com/ansible\-collections/community\.general/pull/8169)\)\. - - -#### community\.hrobot - -* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain \{ or \} as unsafe\, to work around a bug in AWX \([https\://github\.com/ansible\-collections/community\.hrobot/pull/102](https\://github\.com/ansible\-collections/community\.hrobot/pull/102)\)\. - - -#### community\.vmware - -* Use isinstance\(\) instead of type\(\) for a typecheck \([https\://github\.com/ansible\-collections/community\.vmware/pull/2011](https\://github\.com/ansible\-collections/community\.vmware/pull/2011)\)\. -* vmware\_guest \- Fix a error while updating the VM by adding a new disk\. While adding a disk to an existing VM\, it leaves it in invalid state\. \([https\://github\.com/ansible\-collections/community\.vmware/pull/2044](https\://github\.com/ansible\-collections/community\.vmware/pull/2044)\)\. -* vmware\_guest \- Fix a missing error message while setting a template parameter with inconsistency guest\_os ID \([https\://github\.com/ansible\-collections/community\.vmware/pull/2036](https\://github\.com/ansible\-collections/community\.vmware/pull/2036)\)\. - - -#### containers\.podman - -* Fix pod info for non\-existant pods -* podman\_container \- Add check and fixed for v5 network diff -* podman\_container \- Fix pasta networking idempotency for v5 \(\#728\) -* podman\_container\_exec \- Remove unnecessary quotes in podman\_container\_exec module -* podman\_image\_info \- Fix wrong return data type in podman\_image\_info -* podman\_play \- Fix kube play annotations -* podman\_pod \- Fix broken info of pods in Podman v5 -* podman\_pod \- Fix pod for Podman v5 -* podman\_pod \- Fix podman pod v5 broken info issue - - -#### fortinet\.fortios - -* Fix the issue that ssl\-certificate cannot be set in fortios\_firewall\_vip and fortios\_firewall\_vip6\. -* Github issue -* mantis issue - - -#### netapp\.ontap - -* na\_ontap\_dns \- fix issue with modifying DNS servers in REST\. -* na\_ontap\_fpolicy\_policy \- fixed issue with idempotency in REST\. -* na\_ontap\_quotas \- fixed issue with idempotency in REST\. -* na\_ontap\_security\_config \- added warning for missing supported\_cipher\_suites to maintain idempotency in REST\. - - -### New Plugins - - -#### Filter - -* community\.dns\.quote\_txt \- Quotes a string to use as a TXT record entry -* community\.dns\.unquote\_txt \- Unquotes a TXT record entry to a string - - -### New Modules - - -#### community\.aws - -* community\.aws\.dynamodb\_table\_info \- Returns information about a Dynamo DB table - - -#### community\.crypto - -* community\.crypto\.x509\_certificate\_convert \- Convert X\.509 certificates - - -#### community\.general - -* community\.general\.keycloak\_client\_rolescope \- Allows administration of Keycloak client roles scope to restrict the usage of certain roles to a other specific client applications\. - - -#### dellemc\.powerflex - -* dellemc\.powerflex\.resource\_group \- Manage resource group deployments on Dell PowerFlex - - -### Unchanged Collections - -* ansible\.netcommon \(still version 5\.3\.0\) -* ansible\.posix \(still version 1\.5\.4\) -* ansible\.utils \(still version 2\.12\.0\) -* ansible\.windows \(still version 2\.3\.0\) -* arista\.eos \(still version 6\.2\.2\) -* awx\.awx \(still version 23\.9\.0\) -* azure\.azcollection \(still version 1\.19\.0\) -* check\_point\.mgmt \(still version 5\.2\.3\) -* chocolatey\.chocolatey \(still version 1\.5\.1\) -* cisco\.asa \(still version 4\.0\.3\) -* cisco\.ios \(still version 5\.3\.0\) -* cisco\.iosxr \(still version 6\.1\.1\) -* cisco\.nxos \(still version 5\.3\.0\) -* cisco\.ucs \(still version 1\.10\.0\) -* cloud\.common \(still version 2\.1\.4\) -* cloudscale\_ch\.cloud \(still version 2\.3\.1\) -* community\.azure \(still version 2\.0\.0\) -* community\.ciscosmb \(still version 1\.0\.7\) -* community\.digitalocean \(still version 1\.26\.0\) -* community\.grafana \(still version 1\.8\.0\) -* community\.hashi\_vault \(still version 6\.2\.0\) -* community\.libvirt \(still version 1\.3\.0\) -* community\.mysql \(still version 3\.9\.0\) -* community\.network \(still version 5\.0\.2\) -* community\.okd \(still version 2\.3\.0\) -* community\.postgresql \(still version 3\.4\.0\) -* community\.proxysql \(still version 1\.5\.1\) -* community\.sap \(still version 2\.0\.0\) -* community\.sap\_libs \(still version 1\.4\.2\) -* community\.sops \(still version 1\.6\.7\) -* community\.windows \(still version 2\.2\.0\) -* community\.zabbix \(still version 2\.3\.1\) -* cyberark\.conjur \(still version 1\.2\.2\) -* cyberark\.pas \(still version 1\.0\.25\) -* dellemc\.enterprise\_sonic \(still version 2\.4\.0\) -* dellemc\.openmanage \(still version 8\.7\.0\) -* dellemc\.unity \(still version 1\.7\.1\) -* f5networks\.f5\_modules \(still version 1\.28\.0\) -* fortinet\.fortimanager \(still version 2\.4\.0\) -* frr\.frr \(still version 2\.0\.2\) -* gluster\.gluster \(still version 1\.0\.2\) -* google\.cloud \(still version 1\.3\.0\) -* grafana\.grafana \(still version 2\.2\.5\) -* hetzner\.hcloud \(still version 2\.5\.0\) -* hpe\.nimble \(still version 1\.1\.4\) -* ibm\.qradar \(still version 2\.1\.0\) -* ibm\.spectrum\_virtualize \(still version 2\.0\.0\) -* ibm\.storage\_virtualize \(still version 2\.3\.1\) -* infoblox\.nios\_modules \(still version 1\.6\.1\) -* inspur\.ispim \(still version 2\.2\.0\) -* inspur\.sm \(still version 2\.3\.0\) -* junipernetworks\.junos \(still version 5\.3\.1\) -* kubernetes\.core \(still version 2\.4\.2\) -* lowlydba\.sqlserver \(still version 2\.3\.2\) -* microsoft\.ad \(still version 1\.5\.0\) -* netapp\.aws \(still version 21\.7\.1\) -* netapp\.azure \(still version 21\.10\.1\) -* netapp\.cloudmanager \(still version 21\.22\.1\) -* netapp\.elementsw \(still version 21\.7\.0\) -* netapp\.storagegrid \(still version 21\.12\.0\) -* netapp\.um\_info \(still version 21\.8\.1\) -* netapp\_eseries\.santricity \(still version 1\.4\.0\) -* netbox\.netbox \(still version 3\.17\.0\) -* ngine\_io\.cloudstack \(still version 2\.3\.0\) -* ngine\_io\.exoscale \(still version 1\.1\.0\) -* openstack\.cloud \(still version 2\.2\.0\) -* openvswitch\.openvswitch \(still version 2\.1\.1\) -* ovirt\.ovirt \(still version 3\.2\.0\) -* purestorage\.flasharray \(still version 1\.27\.0\) -* purestorage\.fusion \(still version 1\.6\.1\) -* sensu\.sensu\_go \(still version 1\.14\.0\) -* splunk\.es \(still version 2\.1\.2\) -* t\_systems\_mms\.icinga\_director \(still version 2\.0\.1\) -* telekom\_mms\.icinga\_director \(still version 1\.35\.0\) -* theforeman\.foreman \(still version 3\.15\.0\) -* vmware\.vmware\_rest \(still version 2\.3\.1\) -* vultr\.cloud \(still version 1\.12\.1\) -* vyos\.vyos \(still version 4\.1\.0\) -* wti\.remote \(still version 1\.0\.5\) - - -## v9\.4\.0 - -- Release Summary -- Ansible\-core -- Changed Collections -- Minor Changes - - Ansible\-core - - amazon\.aws - - ansible\.windows - - cisco\.dnac - - cisco\.ise - - community\.general - - community\.hashi\_vault - - community\.routeros - - community\.windows - - dellemc\.powerflex - - ibm\.storage\_virtualize - - microsoft\.ad - - purestorage\.flasharray - - purestorage\.flashblade -- Deprecated Features - - amazon\.aws -- Security Fixes - - community\.dns - - community\.docker - - community\.general - - community\.hrobot -- Bugfixes - - Ansible\-core - - amazon\.aws - - ansible\.windows - - community\.dns - - community\.docker - - community\.general - - community\.windows - - ibm\.storage\_virtualize - - kubernetes\.core - - lowlydba\.sqlserver - - microsoft\.ad - - purestorage\.flasharray - - purestorage\.flashblade -- New Plugins - - Filter -- New Modules - - community\.general - - community\.hashi\_vault - - dellemc\.powerflex -- Unchanged Collections - - -### Release Summary - -Release Date\: 2024\-03\-27 - -[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) - - -### Ansible\-core - -Ansible 9\.4\.0 contains ansible\-core version 2\.16\.5\. -This is a newer version than version 2\.16\.4 contained in the previous Ansible release\. - -The changes are reported in the combined changelog below\. - - -### Changed Collections - -If not mentioned explicitly\, the changes are reported in the combined changelog below\. - -| Collection | Ansible 9.3.0 | Ansible 9.4.0 | Notes | -| ---------------------- | ------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| amazon.aws | 7.3.0 | 7.4.0 | | -| ansible.windows | 2.2.0 | 2.3.0 | | -| awx.awx | 23.8.1 | 23.9.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| check_point.mgmt | 5.2.2 | 5.2.3 | | -| cisco.dnac | 6.11.0 | 6.13.1 | | -| cisco.ise | 2.7.0 | 2.8.0 | | -| community.dns | 2.8.1 | 2.8.3 | | -| community.docker | 3.8.0 | 3.8.1 | | -| community.general | 8.4.0 | 8.5.0 | | -| community.hashi_vault | 6.1.0 | 6.2.0 | | -| community.hrobot | 1.9.0 | 1.9.1 | | -| community.mongodb | 1.7.1 | 1.7.2 | There are no changes recorded in the changelog. | -| community.routeros | 2.13.0 | 2.14.0 | | -| community.windows | 2.1.0 | 2.2.0 | | -| dellemc.powerflex | 2.1.0 | 2.2.0 | | -| ibm.storage_virtualize | 2.2.0 | 2.3.1 | | -| kubernetes.core | 2.4.1 | 2.4.2 | | -| lowlydba.sqlserver | 2.3.1 | 2.3.2 | | -| microsoft.ad | 1.4.1 | 1.5.0 | | -| purestorage.flasharray | 1.26.0 | 1.27.0 | | -| purestorage.flashblade | 1.15.0 | 1.16.0 | | - - -### Minor Changes - - -#### Ansible\-core - -* ansible\-test \- Add a work\-around for permission denied errors when using pytest \>\= 8 on multi\-user systems with an installed version of ansible\-test\. - - -#### amazon\.aws - -* AnsibeAWSModule \- added fail\_json\_aws\_error\(\) as a wrapper for fail\_json\(\) and fail\_json\_aws\(\) when passed an AnsibleAWSError exception \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1997](https\://github\.com/ansible\-collections/amazon\.aws/pull/1997)\)\. -* iam\_access\_key \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_access\_key\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_group \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_instance\_profile \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_instance\_profile\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_managed\_policy \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_mfa\_device\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_role \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_role\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_user \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. -* iam\_user\_info \- refactored code to use AnsibleIAMError and IAMErrorHandler as well as moving shared code into module\_utils\.iam \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. - - -#### ansible\.windows - -* win\_uri \- Max depth for json object conversion used to be 2\. Can now send json objects with up to 20 levels of nesting - - -#### cisco\.dnac - -* Added attributes \'dnac\_api\_task\_timeout\' and \'dnac\_task\_poll\_interval\' in intent and workflow\_manager modules\. -* Addressed image un\-tagging issues in inherited site settings\. -* Changes the minimum supported version from Ansible v2\.9\.10 to v2\.14\.0 -* Corrected site creation issues in the site module when optional parameters are missing\. -* Fixed management IP updates for devices on SNMP version v2\. -* Introduced sample playbooks for the discovery module\. -* Provided documentation for EWLC templates in Cisco Catalyst Center version 2\.3\.7\.x\. -* Resolved a \'NoneType\' error in discovery module credentials\. -* inventory\_workflow\_manager \- Added attributes \'add\_user\_defined\_field\'\, \'update\_interface\_details\'\, \'export\_device\_list\' and \'admin\_status\' -* inventory\_workflow\_manager \- Removed attributes \'provision\_wireless\_device\'\, \'reprovision\_wired\_device\' - - -#### cisco\.ise - -* Changes the minimum supported version from Ansible v2\.9\.10 to v2\.14\.0 - - -#### community\.general - -* bitwarden lookup plugin \- allows to fetch all records of a given collection ID\, by allowing to pass an empty value for search\_value when collection\_id is provided \([https\://github\.com/ansible\-collections/community\.general/pull/8013](https\://github\.com/ansible\-collections/community\.general/pull/8013)\)\. -* icinga2 inventory plugin \- adds new parameter group\_by\_hostgroups in order to make grouping by Icinga2 hostgroups optional \([https\://github\.com/ansible\-collections/community\.general/pull/7998](https\://github\.com/ansible\-collections/community\.general/pull/7998)\)\. -* ini\_file \- support optional spaces between section names and their surrounding brackets \([https\://github\.com/ansible\-collections/community\.general/pull/8075](https\://github\.com/ansible\-collections/community\.general/pull/8075)\)\. -* java\_cert \- enable owner\, group\, mode\, and other generic file arguments \([https\://github\.com/ansible\-collections/community\.general/pull/8116](https\://github\.com/ansible\-collections/community\.general/pull/8116)\)\. -* ldap\_attrs \- module now supports diff mode\, showing which attributes are changed within an operation \([https\://github\.com/ansible\-collections/community\.general/pull/8073](https\://github\.com/ansible\-collections/community\.general/pull/8073)\)\. -* lxd\_container \- uses /1\.0/instances API endpoint\, if available\. Falls back to /1\.0/containers or /1\.0/virtual\-machines\. Fixes issue when using Incus or LXD 5\.19 due to migrating to /1\.0/instances endpoint \([https\://github\.com/ansible\-collections/community\.general/pull/7980](https\://github\.com/ansible\-collections/community\.general/pull/7980)\)\. -* nmcli \- allow setting MTU for bond\-slave interface types \([https\://github\.com/ansible\-collections/community\.general/pull/8118](https\://github\.com/ansible\-collections/community\.general/pull/8118)\)\. -* proxmox \- adds startup parameters to configure startup order\, startup delay and shutdown delay \([https\://github\.com/ansible\-collections/community\.general/pull/8038](https\://github\.com/ansible\-collections/community\.general/pull/8038)\)\. -* revbitspss lookup plugin \- removed a redundant unicode prefix\. The prefix was not necessary for Python 3 and has been cleaned up to streamline the code \([https\://github\.com/ansible\-collections/community\.general/pull/8087](https\://github\.com/ansible\-collections/community\.general/pull/8087)\)\. - - -#### community\.hashi\_vault - -* cert auth \- add option to set the cert\_auth\_public\_key and cert\_auth\_private\_key parameters using the variables ansible\_hashi\_vault\_cert\_auth\_public\_key and ansible\_hashi\_vault\_cert\_auth\_private\_key \([https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428](https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428)\)\. - - -#### community\.routeros - -* api\_info\, api\_modify \- add read\-only fields installed\-version\, latest\-version and status in system package update \([https\://github\.com/ansible\-collections/community\.routeros/pull/263](https\://github\.com/ansible\-collections/community\.routeros/pull/263)\)\. -* api\_info\, api\_modify \- added support for interface wifi and its sub\-paths \([https\://github\.com/ansible\-collections/community\.routeros/pull/266](https\://github\.com/ansible\-collections/community\.routeros/pull/266)\)\. -* api\_info\, api\_modify \- remove default value for read\-only running field in interface wireless \([https\://github\.com/ansible\-collections/community\.routeros/pull/264](https\://github\.com/ansible\-collections/community\.routeros/pull/264)\)\. - - -#### community\.windows - -* win\_regmerge \- Add content \'content\' parameter for specifying registry file contents directly - - -#### dellemc\.powerflex - -* The Info module is enhanced to retrieve lists related to fault sets\, service templates\, deployments\, and managed devices\. -* The SDS module has been enhanced to facilitate SDS creation within a fault set\. - - -#### ibm\.storage\_virtualize - -* ibm\_sv\_manage\_snapshot \- Added support to restore subset of volumes of a volumegroup from a snapshot -* ibm\_svc\_info \- Added support to display information about partition\, quorum\, IO group\, VG replication and enclosure\, snmp server and ldap server -* ibm\_svc\_manage\_volume \- Added support to create clone or thinclone from snapshot -* ibm\_svc\_manage\_volumgroup \- Added support to create clone or thinkclone volumegroup from snapshot from a subset of volumes - - -#### microsoft\.ad - -* Added group/microsoft\.ad\.domain module defaults group for the computer\, group\, object\_info\, object\, ou\, and user module\. Users can use this defaults group to set common connection options for these modules such as the domain\_server\, domain\_username\, and domain\_password options\. -* Added support for Jinja2 templating in ldap inventory\. - - -#### purestorage\.flasharray - -* purefa\_arrayname \- Convert to REST v2 -* purefa\_eula \- Only sign if not previously signed\. From REST 2\.30 name\, title and company are no longer required -* purefa\_info \- Add support for controller uptime from Purity//FA 6\.6\.3 -* purefa\_inventory \- Convert to REST v2 -* purefa\_ntp \- Convert to REST v2 -* purefa\_offload \- Convert to REST v2 -* purefa\_pgsnap \- Module now requires minimum FlashArray Purity//FA 6\.1\.0 -* purefa\_ra \- Add present and absent as valid state options -* purefa\_ra \- Add connecting as valid status of RA to perform operations on -* purefa\_ra \- Convert to REST v2 -* purefa\_syslog \- name becomes a required parameter as module converts to full REST 2 support -* purefa\_vnc \- Convert to REST v2 - - -#### purestorage\.flashblade - -* purefb\_ds \- Add force\_bind\_password parameter to allow module to be idempotent\. - - -### Deprecated Features - - -#### amazon\.aws - -* iam\_role\_info \- in a release after 2026\-05\-01 paths must begin and end with / \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\. - - -### Security Fixes - - -#### community\.dns - -* hosttech\_dns\_records and hetzner\_dns\_records inventory plugins \- make sure all data received from the remote servers is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.dns/pull/189](https\://github\.com/ansible\-collections/community\.dns/pull/189)\)\. - - -#### community\.docker - -* docker\_containers\, docker\_machine\, and docker\_swarm inventory plugins \- make sure all data received from the Docker daemon / Docker machine is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.docker/pull/815](https\://github\.com/ansible\-collections/community\.docker/pull/815)\)\. - - -#### community\.general - -* cobbler\, gitlab\_runners\, icinga2\, linode\, lxd\, nmap\, online\, opennebula\, proxmox\, scaleway\, stackpath\_compute\, virtualbox\, and xen\_orchestra inventory plugin \- make sure all data received from the remote servers is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.general/pull/8098](https\://github\.com/ansible\-collections/community\.general/pull/8098)\)\. - - -#### community\.hrobot - -* robot inventory plugin \- make sure all data received from the Hetzner robot service server is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.hrobot/pull/99](https\://github\.com/ansible\-collections/community\.hrobot/pull/99)\)\. - - -### Bugfixes - - -#### Ansible\-core - -* Fix an issue when setting a plugin name from an unsafe source resulted in ValueError\: unmarshallable object \([https\://github\.com/ansible/ansible/issues/82708](https\://github\.com/ansible/ansible/issues/82708)\) -* Harden python templates for respawn and ansiballz around str literal quoting -* ansible\-test \- The libexpat package is automatically upgraded during remote bootstrapping to maintain compatibility with newer Python packages\. -* template \- Fix error when templating an unsafe string which corresponds to an invalid type in Python \([https\://github\.com/ansible/ansible/issues/82600](https\://github\.com/ansible/ansible/issues/82600)\)\. -* winrm \- does not hang when attempting to get process output when stdin write failed - - -#### amazon\.aws - -* cloudwatchevent\_rule \- Fix to avoid adding quotes to JSON input for provided input\_template \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1883](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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1781)\)\. -* module\_utils/elbv2 \- Fix issue when creating or modifying Load balancer rule type authenticate\-oidc using ClientSecret parameter and UseExistingClientSecret\=true \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1877](https\://github\.com/ansible\-collections/amazon\.aws/issues/1877)\)\. - - -#### ansible\.windows - -* win\_get\_url \- Fix Tls1\.3 getting removed from the list of security protocols -* win\_powershell \- Remove unecessary using in code causing stray error records in output \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/571](https\://github\.com/ansible\-collections/ansible\.windows/issues/571) - - -#### community\.dns - -* DNS record modules\, inventory plugins \- fix the TXT entry encoder to avoid splitting up escape sequences for quotes and backslashes over multiple TXT strings \([https\://github\.com/ansible\-collections/community\.dns/issues/190](https\://github\.com/ansible\-collections/community\.dns/issues/190)\, [https\://github\.com/ansible\-collections/community\.dns/pull/191](https\://github\.com/ansible\-collections/community\.dns/pull/191)\)\. -* Update Public Suffix List\. - - -#### community\.docker - -* docker\_compose\_v2 \- do not fail when non\-fatal errors occur\. This can happen when pulling an image fails\, but then the image can be built for another service\. Docker Compose emits an error in that case\, but docker compose up still completes successfully \([https\://github\.com/ansible\-collections/community\.docker/issues/807](https\://github\.com/ansible\-collections/community\.docker/issues/807)\, [https\://github\.com/ansible\-collections/community\.docker/pull/810](https\://github\.com/ansible\-collections/community\.docker/pull/810)\, [https\://github\.com/ansible\-collections/community\.docker/pull/811](https\://github\.com/ansible\-collections/community\.docker/pull/811)\)\. -* docker\_compose\_v2\* modules \- correctly parse Warning events emitted by Docker Compose \([https\://github\.com/ansible\-collections/community\.docker/issues/807](https\://github\.com/ansible\-collections/community\.docker/issues/807)\, [https\://github\.com/ansible\-collections/community\.docker/pull/811](https\://github\.com/ansible\-collections/community\.docker/pull/811)\)\. -* docker\_compose\_v2\* modules \- parse logfmt warnings emitted by Docker Compose \([https\://github\.com/ansible\-collections/community\.docker/issues/787](https\://github\.com/ansible\-collections/community\.docker/issues/787)\, [https\://github\.com/ansible\-collections/community\.docker/pull/811](https\://github\.com/ansible\-collections/community\.docker/pull/811)\)\. -* docker\_compose\_v2\_pull \- fixing idempotence by checking actual pull progress events instead of service\-level pull request when policy\=always\. This stops the module from reporting changed\=true if no actual change happened when pulling\. In check mode\, it has to assume that a change happens though \([https\://github\.com/ansible\-collections/community\.docker/issues/813](https\://github\.com/ansible\-collections/community\.docker/issues/813)\, [https\://github\.com/ansible\-collections/community\.docker/pull/814](https\://github\.com/ansible\-collections/community\.docker/pull/814)\)\. - - -#### community\.general - -* aix\_filesystem \- fix issue with empty list items in crfs logic and option order \([https\://github\.com/ansible\-collections/community\.general/pull/8052](https\://github\.com/ansible\-collections/community\.general/pull/8052)\)\. -* consul\_token \- fix token creation without accessor\_id \([https\://github\.com/ansible\-collections/community\.general/pull/8091](https\://github\.com/ansible\-collections/community\.general/pull/8091)\)\. -* homebrew \- error returned from brew command was ignored and tried to parse empty JSON\. Fix now checks for an error and raises it to give accurate error message to users \([https\://github\.com/ansible\-collections/community\.general/issues/8047](https\://github\.com/ansible\-collections/community\.general/issues/8047)\)\. -* ipa\_hbacrule \- the module uses a string for ipaenabledflag for new FreeIPA versions while the returned value is a boolean \([https\://github\.com/ansible\-collections/community\.general/pull/7880](https\://github\.com/ansible\-collections/community\.general/pull/7880)\)\. -* ipa\_sudorule \- the module uses a string for ipaenabledflag for new FreeIPA versions while the returned value is a boolean \([https\://github\.com/ansible\-collections/community\.general/pull/7880](https\://github\.com/ansible\-collections/community\.general/pull/7880)\)\. -* iptables\_state \- fix idempotency issues when restoring incomplete iptables dumps \([https\://github\.com/ansible\-collections/community\.general/issues/8029](https\://github\.com/ansible\-collections/community\.general/issues/8029)\)\. -* linode inventory plugin \- add descriptive error message for linode inventory plugin \([https\://github\.com/ansible\-collections/community\.general/pull/8133](https\://github\.com/ansible\-collections/community\.general/pull/8133)\)\. -* pacemaker\_cluster \- actually implement check mode\, which the module claims to support\. This means that until now the module also did changes in check mode \([https\://github\.com/ansible\-collections/community\.general/pull/8081](https\://github\.com/ansible\-collections/community\.general/pull/8081)\)\. -* pam\_limits \- when the file does not exist\, do not create it in check mode \([https\://github\.com/ansible\-collections/community\.general/issues/8050](https\://github\.com/ansible\-collections/community\.general/issues/8050)\, [https\://github\.com/ansible\-collections/community\.general/pull/8057](https\://github\.com/ansible\-collections/community\.general/pull/8057)\)\. -* proxmox\_kvm \- fixed status check getting from node\-specific API endpoint \([https\://github\.com/ansible\-collections/community\.general/issues/7817](https\://github\.com/ansible\-collections/community\.general/issues/7817)\)\. - - -#### community\.windows - -* win\_format\, win\_partition \- Add support for Windows failover cluster disks -* win\_psmodule \- Fix up error message with state\=latest -* win\_robocopy \- Fix up cmd return value to include the executable robocopy - - -#### ibm\.storage\_virtualize - -* ibm\_svc\_info \- Command and release mapping to remove errors in gather\_subset\=all -* ibm\_svc\_info \- Return error in listing entities that require object name - - -#### kubernetes\.core - -* Resolve Collections util resource discovery fails when complex subresources present \([https\://github\.com/ansible\-collections/kubernetes\.core/pull/676](https\://github\.com/ansible\-collections/kubernetes\.core/pull/676)\)\. - - -#### lowlydba\.sqlserver - -* Update documentation for agent\_job\_schedule to reflect proper input formatting\. \([https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/229](https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/229)\) - - -#### microsoft\.ad - -* microsoft\.ad\.group \- Support membership lookup of groups that are longer than 20 characters long -* microsoft\.ad\.membership \- Add helpful hint when the failure was due to a missing/invalid domain\_ou\_path \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/88](https\://github\.com/ansible\-collections/microsoft\.ad/issues/88) - - -#### purestorage\.flasharray - -* purefa\_certs \- Allow certificates of over 3000 characters to be imported\. -* purefa\_info \- Resolved issue with KeyError when LACP bonds are in use -* purefa\_inventory \- Fix issue with iSCSI\-only FlashArrays -* purefa\_pgsnap \- Add support for restoring volumes connected to hosts in a host\-based protection group and hosts in a hostgroup\-based protection group\. - - -#### purestorage\.flashblade - -* purefb\_bucket \- Changed logic to allow complex buckets to be created in a single call\, rather than having to split into two tasks\. -* purefb\_lag \- Enable LAG port configuration with multi\-chassis -* purefb\_timeout \- Fixed arithmetic error that resulted in module incorrectly reporting changed when no change was required\. - - -### New Plugins - - -#### Filter - -* microsoft\.ad\.dn\_escape \- Escape an LDAP DistinguishedName value string\. -* microsoft\.ad\.parse\_dn \- Parses an LDAP DistinguishedName string into an object\. - - -### New Modules - - -#### community\.general - -* community\.general\.usb\_facts \- Allows listing information about USB devices - - -#### community\.hashi\_vault - -* community\.hashi\_vault\.vault\_database\_connection\_configure \- Configures the database engine -* community\.hashi\_vault\.vault\_database\_connection\_delete \- Delete a Database Connection -* community\.hashi\_vault\.vault\_database\_connection\_read \- Returns the configuration settings for a O\(connection\_name\) -* community\.hashi\_vault\.vault\_database\_connection\_reset \- Closes a O\(connection\_name\) and its underlying plugin and restarts it with the configuration stored -* community\.hashi\_vault\.vault\_database\_connections\_list \- Returns a list of available connections -* community\.hashi\_vault\.vault\_database\_role\_create \- Creates or updates a \(dynamic\) role definition -* community\.hashi\_vault\.vault\_database\_role\_delete \- Delete a role definition -* community\.hashi\_vault\.vault\_database\_role\_read \- Queries a dynamic role definition -* community\.hashi\_vault\.vault\_database\_roles\_list \- Returns a list of available \(dynamic\) roles -* community\.hashi\_vault\.vault\_database\_rotate\_root\_credentials \- Rotates the root credentials stored for the database connection\. This user must have permissions to update its own password\. -* community\.hashi\_vault\.vault\_database\_static\_role\_create \- Create or update a static role -* community\.hashi\_vault\.vault\_database\_static\_role\_get\_credentials \- Returns the current credentials based on the named static role -* community\.hashi\_vault\.vault\_database\_static\_role\_read \- Queries a static role definition -* community\.hashi\_vault\.vault\_database\_static\_role\_rotate\_credentials \- Trigger the credential rotation for a static role -* community\.hashi\_vault\.vault\_database\_static\_roles\_list \- Returns a list of available static roles - - -#### dellemc\.powerflex - -* dellemc\.powerflex\.fault\_set \- Manage Fault Sets on Dell PowerFlex - - -### Unchanged Collections - -* ansible\.netcommon \(still version 5\.3\.0\) -* ansible\.posix \(still version 1\.5\.4\) -* ansible\.utils \(still version 2\.12\.0\) -* arista\.eos \(still version 6\.2\.2\) -* azure\.azcollection \(still version 1\.19\.0\) -* chocolatey\.chocolatey \(still version 1\.5\.1\) -* cisco\.aci \(still version 2\.8\.0\) -* cisco\.asa \(still version 4\.0\.3\) -* cisco\.intersight \(still version 2\.0\.7\) -* cisco\.ios \(still version 5\.3\.0\) -* cisco\.iosxr \(still version 6\.1\.1\) -* cisco\.meraki \(still version 2\.17\.2\) -* cisco\.mso \(still version 2\.5\.0\) -* cisco\.nxos \(still version 5\.3\.0\) -* cisco\.ucs \(still version 1\.10\.0\) -* cloud\.common \(still version 2\.1\.4\) -* cloudscale\_ch\.cloud \(still version 2\.3\.1\) -* community\.aws \(still version 7\.1\.0\) -* community\.azure \(still version 2\.0\.0\) -* community\.ciscosmb \(still version 1\.0\.7\) -* community\.crypto \(still version 2\.18\.0\) -* community\.digitalocean \(still version 1\.26\.0\) -* community\.grafana \(still version 1\.8\.0\) -* community\.library\_inventory\_filtering\_v1 \(still version 1\.0\.0\) -* community\.libvirt \(still version 1\.3\.0\) -* community\.mysql \(still version 3\.9\.0\) -* community\.network \(still version 5\.0\.2\) -* community\.okd \(still version 2\.3\.0\) -* community\.postgresql \(still version 3\.4\.0\) -* community\.proxysql \(still version 1\.5\.1\) -* community\.rabbitmq \(still version 1\.2\.3\) -* community\.sap \(still version 2\.0\.0\) -* community\.sap\_libs \(still version 1\.4\.2\) -* community\.sops \(still version 1\.6\.7\) -* community\.vmware \(still version 4\.2\.0\) -* community\.zabbix \(still version 2\.3\.1\) -* containers\.podman \(still version 1\.12\.0\) -* cyberark\.conjur \(still version 1\.2\.2\) -* cyberark\.pas \(still version 1\.0\.25\) -* dellemc\.enterprise\_sonic \(still version 2\.4\.0\) -* dellemc\.openmanage \(still version 8\.7\.0\) -* dellemc\.unity \(still version 1\.7\.1\) -* f5networks\.f5\_modules \(still version 1\.28\.0\) -* fortinet\.fortimanager \(still version 2\.4\.0\) -* fortinet\.fortios \(still version 2\.3\.5\) -* frr\.frr \(still version 2\.0\.2\) -* gluster\.gluster \(still version 1\.0\.2\) -* google\.cloud \(still version 1\.3\.0\) -* grafana\.grafana \(still version 2\.2\.5\) -* hetzner\.hcloud \(still version 2\.5\.0\) -* hpe\.nimble \(still version 1\.1\.4\) -* ibm\.qradar \(still version 2\.1\.0\) -* ibm\.spectrum\_virtualize \(still version 2\.0\.0\) -* infinidat\.infinibox \(still version 1\.4\.3\) -* infoblox\.nios\_modules \(still version 1\.6\.1\) -* inspur\.ispim \(still version 2\.2\.0\) -* inspur\.sm \(still version 2\.3\.0\) -* junipernetworks\.junos \(still version 5\.3\.1\) -* netapp\.aws \(still version 21\.7\.1\) -* netapp\.azure \(still version 21\.10\.1\) -* netapp\.cloudmanager \(still version 21\.22\.1\) -* netapp\.elementsw \(still version 21\.7\.0\) -* netapp\.ontap \(still version 22\.10\.0\) -* netapp\.storagegrid \(still version 21\.12\.0\) -* netapp\.um\_info \(still version 21\.8\.1\) -* netapp\_eseries\.santricity \(still version 1\.4\.0\) -* netbox\.netbox \(still version 3\.17\.0\) -* ngine\_io\.cloudstack \(still version 2\.3\.0\) -* ngine\_io\.exoscale \(still version 1\.1\.0\) -* openstack\.cloud \(still version 2\.2\.0\) -* openvswitch\.openvswitch \(still version 2\.1\.1\) -* ovirt\.ovirt \(still version 3\.2\.0\) -* purestorage\.fusion \(still version 1\.6\.1\) -* sensu\.sensu\_go \(still version 1\.14\.0\) -* splunk\.es \(still version 2\.1\.2\) -* t\_systems\_mms\.icinga\_director \(still version 2\.0\.1\) -* telekom\_mms\.icinga\_director \(still version 1\.35\.0\) -* theforeman\.foreman \(still version 3\.15\.0\) -* vmware\.vmware\_rest \(still version 2\.3\.1\) -* vultr\.cloud \(still version 1\.12\.1\) -* vyos\.vyos \(still version 4\.1\.0\) -* wti\.remote \(still version 1\.0\.5\) - - -## v9\.3\.0 - -- Release Summary -- Ansible\-core -- Changed Collections -- Major Changes - - community\.mysql - - fortinet\.fortios -- Minor Changes - - amazon\.aws - - community\.crypto - - community\.docker - - community\.general - - community\.grafana - - community\.mysql - - community\.postgresql - - community\.routeros - - community\.vmware - - containers\.podman - - fortinet\.fortimanager - - grafana\.grafana - - hetzner\.hcloud - - lowlydba\.sqlserver - - netapp\.ontap - - netapp\.storagegrid - - netbox\.netbox - - purestorage\.fusion -- Deprecated Features - - community\.crypto -- Bugfixes - - Ansible\-core - - amazon\.aws - - community\.crypto - - community\.dns - - community\.docker - - community\.general - - community\.grafana - - community\.mysql - - community\.postgresql - - community\.routeros - - containers\.podman - - f5networks\.f5\_modules - - fortinet\.fortimanager - - fortinet\.fortios - - lowlydba\.sqlserver - - netapp\.ontap - - netapp\.storagegrid - - netbox\.netbox -- New Plugins - - Callback - - Filter -- New Modules - - community\.general - - containers\.podman - - fortinet\.fortimanager - - hetzner\.hcloud - - netbox\.netbox -- Unchanged Collections - - -### Release Summary - -Release Date\: 2024\-02\-27 - -[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) - - -### Ansible\-core - -Ansible 9\.3\.0 contains ansible\-core version 2\.16\.4\. -This is a newer version than version 2\.16\.3 contained in the previous Ansible release\. - -The changes are reported in the combined changelog below\. - - -### Changed Collections - -If not mentioned explicitly\, the changes are reported in the combined changelog below\. - -| Collection | Ansible 9.2.0 | Ansible 9.3.0 | Notes | -| --------------------- | ------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| amazon.aws | 7.2.0 | 7.3.0 | | -| awx.awx | 23.6.0 | 23.8.1 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| cisco.dnac | 6.10.2 | 6.11.0 | The collection did not have a changelog in this version. | -| community.crypto | 2.17.1 | 2.18.0 | | -| community.dns | 2.8.0 | 2.8.1 | | -| community.docker | 3.7.0 | 3.8.0 | | -| community.general | 8.3.0 | 8.4.0 | | -| community.grafana | 1.7.0 | 1.8.0 | | -| community.mongodb | 1.6.3 | 1.7.1 | There are no changes recorded in the changelog. | -| community.mysql | 3.8.0 | 3.9.0 | | -| community.postgresql | 3.3.0 | 3.4.0 | | -| community.routeros | 2.12.0 | 2.13.0 | | -| community.vmware | 4.1.0 | 4.2.0 | | -| containers.podman | 1.11.0 | 1.12.0 | | -| f5networks.f5_modules | 1.27.1 | 1.28.0 | | -| fortinet.fortimanager | 2.3.1 | 2.4.0 | | -| fortinet.fortios | 2.3.4 | 2.3.5 | | -| grafana.grafana | 2.2.4 | 2.2.5 | | -| hetzner.hcloud | 2.4.1 | 2.5.0 | | -| infinidat.infinibox | 1.3.12 | 1.4.3 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| kubernetes.core | 2.4.0 | 2.4.1 | | -| lowlydba.sqlserver | 2.2.2 | 2.3.1 | | -| netapp.ontap | 22.9.0 | 22.10.0 | | -| netapp.storagegrid | 21.11.1 | 21.12.0 | | -| netbox.netbox | 3.16.0 | 3.17.0 | | -| purestorage.fusion | 1.6.0 | 1.6.1 | | - - -### Major Changes - - -#### community\.mysql - -* Collection version 2\.\*\.\* is EOL\, no more bugfixes will be backported\. Please consider upgrading to the latest version\. - - -#### fortinet\.fortios - -* Update all the boolean values to true/false in the documents and examples\. -* Update the document of log\_fact\. -* Update the mismatched version message with version ranges\. -* Update the required ansible version to 2\.14\. -* Update the supported version ranges instead of concrete version numbers to reduce the collection size\. - - -### Minor Changes - - -#### amazon\.aws - -* backup\_plan \- Let user to set schedule\_expression\_timezone for backup plan rules when when using botocore \>\= 1\.31\.36 \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1952](https\://github\.com/ansible\-collections/amazon\.aws/issues/1952)\)\. -* iam\_user \- refactored error handling to use a decorator \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1951](https\://github\.com/ansible\-collections/amazon\.aws/pull/1951)\)\. -* lambda \- added support for using ECR images for the function \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1939](https\://github\.com/ansible\-collections/amazon\.aws/pull/1939)\)\. -* module\_utils\.errors \- added a basic error handler decorator \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1951](https\://github\.com/ansible\-collections/amazon\.aws/pull/1951)\)\. -* rds\_cluster \- Add support for ServerlessV2ScalingConfiguration to create and modify cluster operations \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1839](https\://github\.com/ansible\-collections/amazon\.aws/pull/1839)\)\. -* s3\_bucket\_info \- add parameter bucket\_versioning to return the versioning state of a bucket \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1919](https\://github\.com/ansible\-collections/amazon\.aws/pull/1919)\)\. -* s3\_object\_info \- fix exception raised when listing objects from empty bucket \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1919](https\://github\.com/ansible\-collections/amazon\.aws/pull/1919)\)\. - - -#### community\.crypto - -* x509\_crl \- the new option serial\_numbers allow to configure in which format serial numbers can be provided to revoked\_certificates\[\]\.serial\_number\. The default is as integers \(serial\_numbers\=integer\) for backwards compatibility\; setting serial\_numbers\=hex\-octets allows to specify colon\-separated hex octet strings like 00\:11\:22\:FF \([https\://github\.com/ansible\-collections/community\.crypto/issues/687](https\://github\.com/ansible\-collections/community\.crypto/issues/687)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/715](https\://github\.com/ansible\-collections/community\.crypto/pull/715)\)\. - - -#### community\.docker - -* docker\_compose\_v2 \- allow to wait until containers are running/health when running docker compose up with the new wait option \([https\://github\.com/ansible\-collections/community\.docker/issues/794](https\://github\.com/ansible\-collections/community\.docker/issues/794)\, [https\://github\.com/ansible\-collections/community\.docker/pull/796](https\://github\.com/ansible\-collections/community\.docker/pull/796)\)\. -* docker\_container \- the pull\_check\_mode\_behavior option now allows to control the module\'s behavior in check mode when pull\=always \([https\://github\.com/ansible\-collections/community\.docker/issues/792](https\://github\.com/ansible\-collections/community\.docker/issues/792)\, [https\://github\.com/ansible\-collections/community\.docker/pull/797](https\://github\.com/ansible\-collections/community\.docker/pull/797)\)\. -* docker\_container \- the pull option now accepts the three values never\, missing\_image \(default\)\, and never\, next to the previously valid values true \(equivalent to always\) and false \(equivalent to missing\_image\)\. This allows the equivalent to \-\-pull\=never from the Docker command line \([https\://github\.com/ansible\-collections/community\.docker/issues/783](https\://github\.com/ansible\-collections/community\.docker/issues/783)\, [https\://github\.com/ansible\-collections/community\.docker/pull/797](https\://github\.com/ansible\-collections/community\.docker/pull/797)\)\. - - -#### community\.general - -* bitwarden lookup plugin \- add bw\_session option\, to pass session key instead of reading from env \([https\://github\.com/ansible\-collections/community\.general/pull/7994](https\://github\.com/ansible\-collections/community\.general/pull/7994)\)\. -* gitlab\_deploy\_key\, gitlab\_group\_members\, gitlab\_group\_variable\, gitlab\_hook\, gitlab\_instance\_variable\, gitlab\_project\_badge\, gitlab\_project\_variable\, gitlab\_user \- improve API pagination and compatibility with different versions of python\-gitlab \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\. -* gitlab\_hook \- adds releases\_events parameter for supporting Releases events triggers on GitLab hooks \([https\://github\.com/ansible\-collections/community\.general/pull/7956](https\://github\.com/ansible\-collections/community\.general/pull/7956)\)\. -* icinga2 inventory plugin \- add Jinja2 templating support to url\, user\, and password paramenters \([https\://github\.com/ansible\-collections/community\.general/issues/7074](https\://github\.com/ansible\-collections/community\.general/issues/7074)\, [https\://github\.com/ansible\-collections/community\.general/pull/7996](https\://github\.com/ansible\-collections/community\.general/pull/7996)\)\. -* mssql\_script \- adds transactional \(rollback/commit\) support via optional boolean param transaction \([https\://github\.com/ansible\-collections/community\.general/pull/7976](https\://github\.com/ansible\-collections/community\.general/pull/7976)\)\. -* proxmox\_kvm \- add parameter update\_unsafe to avoid limitations when updating dangerous values \([https\://github\.com/ansible\-collections/community\.general/pull/7843](https\://github\.com/ansible\-collections/community\.general/pull/7843)\)\. -* redfish\_config \- add command SetServiceIdentification to set service identification \([https\://github\.com/ansible\-collections/community\.general/issues/7916](https\://github\.com/ansible\-collections/community\.general/issues/7916)\)\. -* sudoers \- add support for the NOEXEC tag in sudoers rules \([https\://github\.com/ansible\-collections/community\.general/pull/7983](https\://github\.com/ansible\-collections/community\.general/pull/7983)\)\. -* terraform \- fix diff\_mode in state absent and when terraform resource\_changes does not exist \([https\://github\.com/ansible\-collections/community\.general/pull/7963](https\://github\.com/ansible\-collections/community\.general/pull/7963)\)\. - - -#### community\.grafana - -* Manage grafana\_folder for organizations -* Merged ansible role telekom\-mms/ansible\-role\-grafana into ansible\-collections/community\.grafana -* added community\.grafana\.notification\_channel to role -* grafana\_dashboard \- add check\_mode support - - -#### community\.mysql - -* mysql\_user \- add the password\_expire and password\_expire\_interval arguments to implement the password expiration management for mysql user \([https\://github\.com/ansible\-collections/community\.mysql/pull/598](https\://github\.com/ansible\-collections/community\.mysql/pull/598)\)\. -* mysql\_user \- add user attribute support via the attributes parameter and return value \([https\://github\.com/ansible\-collections/community\.mysql/pull/604](https\://github\.com/ansible\-collections/community\.mysql/pull/604)\)\. - - -#### community\.postgresql - -* postgresql\_db \- add the icu\_locale argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\. -* postgresql\_db \- add the locale\_provider argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\. - - -#### community\.routeros - -* api\_info\, api\_modify \- make path user group modifiable and add comment attribute \([https\://github\.com/ansible\-collections/community\.routeros/issues/256](https\://github\.com/ansible\-collections/community\.routeros/issues/256)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/257](https\://github\.com/ansible\-collections/community\.routeros/pull/257)\)\. -* api\_modify\, api\_info \- add support for the ip vrf path in RouterOS 7 \([https\://github\.com/ansible\-collections/community\.routeros/pull/259](https\://github\.com/ansible\-collections/community\.routeros/pull/259)\) - - -#### community\.vmware - -* Add standard function vmware\_argument\_spec\(\) from module\_utils for using default env fallback function\. [https\://github\.com/ansible\-collections/community\.vmware/issues/1977](https\://github\.com/ansible\-collections/community\.vmware/issues/1977) -* vmware\_first\_class\_disk\_info \- Add a module to gather informations about first class disks\. \([https\://github\.com/ansible\-collections/community\.vmware/pull/1996](https\://github\.com/ansible\-collections/community\.vmware/pull/1996)\)\. \([https\://github\.com/ansible\-collections/community\.vmware/issues/1988](https\://github\.com/ansible\-collections/community\.vmware/issues/1988)\)\. -* vmware\_host\_facts \- Add the possibility to get the related datacenter\. \([https\://github\.com/ansible\-collections/community\.vmware/pull/1994](https\://github\.com/ansible\-collections/community\.vmware/pull/1994)\)\. -* vmware\_vm\_inventory \- Add parameter subproperties \([https\://github\.com/ansible\-collections/community\.vmware/pull/1972](https\://github\.com/ansible\-collections/community\.vmware/pull/1972)\)\. -* vmware\_vmkernel \- Add the function to set the enable\_backup\_nfc setting \([https\://github\.com/ansible\-collections/community\.vmware/pull/1978](https\://github\.com/ansible\-collections/community\.vmware/pull/1978)\) -* vsphere\_copy \- Add parameter to tell vsphere\_copy which diskformat is being uploaded \([https\://github\.com/ansible\-collections/community\.vmware/pull/1995](https\://github\.com/ansible\-collections/community\.vmware/pull/1995)\)\. - - -#### containers\.podman - -* Add log\_opt and annotaion options to podman\_play module -* Add option to parse CreateCommand easily for diff calc -* Add support for setting underlying interface in podman\_network -* Alias generate systemd options stop\_timeout and time -* Fix CI rootfs for podman\_container -* Fix broken conmon version in CI install -* Improve security\_opt comparison between existing container -* podman\_container \- Add new arguments to podman status commands -* podman\_container \- Update env\_file to accept a list of files instead of a single file -* podman\_secret\_info \- Add secrets info module - - -#### fortinet\.fortimanager - -* Added deprecated warning to invalid argument name\, please change the invalid argument name such as \"var\-name\"\, \"var name\" to \"var\_name\"\. -* Supported fortimanager 7\.4\.2\, 21 new modules\. - - -#### grafana\.grafana - -* Add \'run\_once\' to download\&unzip tasks by \@v\-zhuravlev in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/136](https\://github\.com/grafana/grafana\-ansible\-collection/pull/136) -* Adding oauth\_allow\_insecure\_email\_lookup to fix oauth user sync error by \@hypery2k in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/132](https\://github\.com/grafana/grafana\-ansible\-collection/pull/132) -* Bump ansible\-core from 2\.15\.4 to 2\.15\.8 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/137](https\://github\.com/grafana/grafana\-ansible\-collection/pull/137) -* Bump ansible\-lint from 6\.13\.1 to 6\.14\.3 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/139](https\://github\.com/grafana/grafana\-ansible\-collection/pull/139) -* Bump ansible\-lint from 6\.14\.3 to 6\.22\.2 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/142](https\://github\.com/grafana/grafana\-ansible\-collection/pull/142) -* Bump ansible\-lint from 6\.22\.2 to 24\.2\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/150](https\://github\.com/grafana/grafana\-ansible\-collection/pull/150) -* Bump jinja2 from 3\.1\.2 to 3\.1\.3 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/129](https\://github\.com/grafana/grafana\-ansible\-collection/pull/129) -* Bump pylint from 2\.16\.2 to 3\.0\.3 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/141](https\://github\.com/grafana/grafana\-ansible\-collection/pull/141) -* Bump yamllint from 1\.29\.0 to 1\.33\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/140](https\://github\.com/grafana/grafana\-ansible\-collection/pull/140) -* Bump yamllint from 1\.29\.0 to 1\.33\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/143](https\://github\.com/grafana/grafana\-ansible\-collection/pull/143) -* Bump yamllint from 1\.33\.0 to 1\.34\.0 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/151](https\://github\.com/grafana/grafana\-ansible\-collection/pull/151) -* Change handler to systemd by \@v\-zhuravlev in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/135](https\://github\.com/grafana/grafana\-ansible\-collection/pull/135) -* Fix links in grafana\_agent/defaults/main\.yaml by \@PabloCastellano in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/134](https\://github\.com/grafana/grafana\-ansible\-collection/pull/134) -* Topic/grafana agent idempotency by \@ohdearaugustin in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/147](https\://github\.com/grafana/grafana\-ansible\-collection/pull/147) - - -#### hetzner\.hcloud - -* Replace deprecated ansible\.netcommon ip utils with python ipaddress module\. The ansible\.netcommon collection is no longer required by the collections\. -* firewall \- Allow forcing the deletion of firewalls that are still in use\. -* firewall \- Do not silence \'firewall still in use\' delete failures\. -* firewall \- Return resources the firewall is applied\_to\. -* firewall\_info \- Add new firewall\_info module to gather firewalls info\. -* firewall\_resource \- Add new firewall\_resource module to manage firewalls resources\. -* inventory \- Add hostvars\_prefix and hostvars\_suffix\` options to customize the inventory host variables keys\. - - -#### lowlydba\.sqlserver - -* Add ability to prevent changing login\'s password\, even if password supplied\. -* Add new input strings to be compatible with dbops v0\.9\.x \([https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/231](https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/231)\) - - -#### netapp\.ontap - -* na\_ontap\_cifs\_server \- new option is\_multichannel\_enabled added in REST\, requires ONTAP 9\.10 or later\. -* na\_ontap\_export\_policy\_rule \- added actions and modify in module output\. -* na\_ontap\_file\_security\_permissions\_acl \- added actions and modify in module output\. -* na\_ontap\_igroup\_initiator \- added actions in module output\. -* na\_ontap\_lun\_map \- added actions in module output\. -* na\_ontap\_lun\_map\_reporting\_nodes \- added actions in module output\. -* na\_ontap\_name\_mappings \- added actions and modify in module output\. -* na\_ontap\_node \- added modify in module output\. -* na\_ontap\_rest\_info \- added warning message if given subset doesn\'t support option owning\_resource\. -* na\_ontap\_storage\_auto\_giveback \- added information on modified attributes in module output\. -* na\_ontap\_vscan\_scanner\_pool \- added REST support to Vscan Scanner Pools Configuration module\, requires ONTAP 9\.6 or later\. - - -#### netapp\.storagegrid - -* na\_sg\_grid\_account \- New option allow\_select\_object\_content for enabling use of the S3 SelectObjectContent API\. -* na\_sg\_grid\_account \- New option description for setting additional identifying information for the tenant account\. - - -#### netbox\.netbox - -* CI \- CI adjustments \[\#1154\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1154](https\://github\.com/netbox\-community/ansible\_modules/pull/1154)\) \[\#1155\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1155](https\://github\.com/netbox\-community/ansible\_modules/pull/1155)\) \[\#1157\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1157](https\://github\.com/netbox\-community/ansible\_modules/pull/1157)\) -* nb\_lookup \- Add new VPN endpoints for NetBox 3\.7 support \[\#1162\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1162](https\://github\.com/netbox\-community/ansible\_modules/pull/1162)\) -* netbox\_rack\_role \- Add description option \[\#1143\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1143](https\://github\.com/netbox\-community/ansible\_modules/pull/1143)\) -* netbox\_virtual\_disk \- New module \[\#1153\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1153](https\://github\.com/netbox\-community/ansible\_modules/pull/1153)\) -* netbox\_virtual\_machine and netbox\_device \- Add option config\_template \[\#1171\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1171](https\://github\.com/netbox\-community/ansible\_modules/pull/1171)\) - - -#### purestorage\.fusion - -* fusion\_volume \- Allow creating a new volume from already existing volume or volume snapshot - - -### Deprecated Features - -* The inspur\.sm collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://forum\.ansible\.com/t/2854](https\://forum\.ansible\.com/t/2854)\)\. -* The netapp\.storagegrid collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://forum\.ansible\.com/t/2811](https\://forum\.ansible\.com/t/2811)\)\. -* The purestorage\.fusion collection is officially unmaintained and has been archived\. Therefore\, it will be removed from Ansible 10 \([https\://forum\.ansible\.com/t/3712](https\://forum\.ansible\.com/t/3712)\)\. - - -#### community\.crypto - -* openssl\_csr\_pipe\, openssl\_privatekey\_pipe\, x509\_certificate\_pipe \- the current behavior of check mode is deprecated and will change in community\.crypto 3\.0\.0\. The current behavior is similar to the modules without \_pipe\: if the object needs to be \(re\-\)generated\, only the changed status is set\, but the object is not updated\. From community\.crypto 3\.0\.0 on\, the modules will ignore check mode and always act as if check mode is not active\. This behavior can already achieved now by adding check\_mode\: false to the task\. If you think this breaks your use\-case of this module\, please [create an issue in the community\.crypto repository](https\://github\.com/ansible\-collections/community\.crypto/issues/new/choose) \([https\://github\.com/ansible\-collections/community\.crypto/issues/712](https\://github\.com/ansible\-collections/community\.crypto/issues/712)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/714](https\://github\.com/ansible\-collections/community\.crypto/pull/714)\)\. - - -### Bugfixes - - -#### Ansible\-core - -* Fix loading vars\_plugins in roles \([https\://github\.com/ansible/ansible/issues/82239](https\://github\.com/ansible/ansible/issues/82239)\)\. -* expect \- fix argument spec error using timeout\=null \([https\://github\.com/ansible/ansible/issues/80982](https\://github\.com/ansible/ansible/issues/80982)\)\. -* include\_vars \- fix calculating depth relative to the root and ensure all files are included \([https\://github\.com/ansible/ansible/issues/80987](https\://github\.com/ansible/ansible/issues/80987)\)\. -* templating \- ensure syntax errors originating from a template being compiled into Python code object result in a failure \([https\://github\.com/ansible/ansible/issues/82606](https\://github\.com/ansible/ansible/issues/82606)\) - - -#### amazon\.aws - -* backup\_plan \- Fix idempotency issue when using botocore \>\= 1\.31\.36 \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1952](https\://github\.com/ansible\-collections/amazon\.aws/issues/1952)\)\. -* 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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1713)\)\. - - -#### community\.crypto - -* luks\_device \- fixed module a bug that prevented using remove\_keyslot with the value 0 \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\. -* luks\_device \- fixed module falsely outputting changed\=false when trying to add a new slot with a key that is already present in another slot\. The module now rejects adding keys that are already present in another slot \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\. -* luks\_device \- fixed testing of LUKS passphrases in when specifying a keyslot for cryptsetup version 2\.0\.3\. The output of this cryptsetup version slightly differs from later versions \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\. - - -#### community\.dns - -* Update Public Suffix List\. - - -#### community\.docker - -* docker\_compose\_v2 \- do not consider a Waiting event as an action/change \([https\://github\.com/ansible\-collections/community\.docker/pull/804](https\://github\.com/ansible\-collections/community\.docker/pull/804)\)\. -* docker\_compose\_v2 \- do not treat service\-level pull events as changes to avoid incorrect changed\=true return value of pull\=always \([https\://github\.com/ansible\-collections/community\.docker/issues/802](https\://github\.com/ansible\-collections/community\.docker/issues/802)\, [https\://github\.com/ansible\-collections/community\.docker/pull/803](https\://github\.com/ansible\-collections/community\.docker/pull/803)\)\. -* docker\_compose\_v2\, docker\_compose\_v2\_pull \- fix parsing of pull messages for Docker Compose 2\.20\.0 \([https\://github\.com/ansible\-collections/community\.docker/issues/785](https\://github\.com/ansible\-collections/community\.docker/issues/785)\, [https\://github\.com/ansible\-collections/community\.docker/pull/786](https\://github\.com/ansible\-collections/community\.docker/pull/786)\)\. - - -#### community\.general - -* cargo \- fix idempotency issues when using a custom installation path for packages \(using the \-\-path parameter\)\. The initial installation runs fine\, but subsequent runs use the get\_installed\(\) function which did not check the given installation location\, before running cargo install\. This resulted in a false changed state\. Also the removal of packeges using state\: absent failed\, as the installation check did not use the given parameter \([https\://github\.com/ansible\-collections/community\.general/pull/7970](https\://github\.com/ansible\-collections/community\.general/pull/7970)\)\. -* gitlab\_issue \- fix behavior to search GitLab issue\, using search keyword instead of title \([https\://github\.com/ansible\-collections/community\.general/issues/7846](https\://github\.com/ansible\-collections/community\.general/issues/7846)\)\. -* gitlab\_runner \- fix pagination when checking for existing runners \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\. -* keycloak\_client \- fixes issue when metadata is provided in desired state when task is in check mode \([https\://github\.com/ansible\-collections/community\.general/issues/1226](https\://github\.com/ansible\-collections/community\.general/issues/1226)\, [https\://github\.com/ansible\-collections/community\.general/pull/7881](https\://github\.com/ansible\-collections/community\.general/pull/7881)\)\. -* modprobe \- listing modules files or modprobe files could trigger a FileNotFoundError if /etc/modprobe\.d or /etc/modules\-load\.d did not exist\. Relevant functions now return empty lists if the directories do not exist to avoid crashing the module \([https\://github\.com/ansible\-collections/community\.general/issues/7717](https\://github\.com/ansible\-collections/community\.general/issues/7717)\)\. -* onepassword lookup plugin \- failed for fields that were in sections and had uppercase letters in the label/ID\. Field lookups are now case insensitive in all cases \([https\://github\.com/ansible\-collections/community\.general/pull/7919](https\://github\.com/ansible\-collections/community\.general/pull/7919)\)\. -* pkgin \- pkgin \(pkgsrc package manager used by SmartOS\) raises erratic exceptions and spurious changed\=true \([https\://github\.com/ansible\-collections/community\.general/pull/7971](https\://github\.com/ansible\-collections/community\.general/pull/7971)\)\. -* redfish\_info \- allow for a GET operation invoked by GetUpdateStatus to allow for an empty response body for cases where a service returns 204 No Content \([https\://github\.com/ansible\-collections/community\.general/issues/8003](https\://github\.com/ansible\-collections/community\.general/issues/8003)\)\. -* redfish\_info \- correct uncaught exception when attempting to retrieve Chassis information \([https\://github\.com/ansible\-collections/community\.general/pull/7952](https\://github\.com/ansible\-collections/community\.general/pull/7952)\)\. - - -#### community\.grafana - -* test\: replace deprecated TestCase\.assertEquals to support Python 3\.12 - - -#### community\.mysql - -* mysql\_info \- the slave\_status filter was returning an empty list on MariaDB with multiple replication channels\. It now returns all channels by running SHOW ALL SLAVES STATUS for MariaDB servers \([https\://github\.com/ansible\-collections/community\.mysql/issues/603](https\://github\.com/ansible\-collections/community\.mysql/issues/603)\)\. - - -#### community\.postgresql - -* postgresql\_privs \- fix a failure when altering privileges with grant\_option\: true \([https\://github\.com/ansible\-collections/community\.postgresql/issues/668](https\://github\.com/ansible\-collections/community\.postgresql/issues/668)\)\. - - -#### community\.routeros - -* facts \- fix date not getting removed for idempotent config export \([https\://github\.com/ansible\-collections/community\.routeros/pull/262](https\://github\.com/ansible\-collections/community\.routeros/pull/262)\)\. - - -#### containers\.podman - -* Add idempotency for podman\_secret module -* Catch exceptions when no JSON output in podman\_image -* Fail if systemd generation failed and it\'s explicitly set -* Fix example name -* Fix idempotency for podman\_network -* Fix idempotency when using 0\.0\.0\.0 in ports -* Fix multi\-image support for podman\_save -* Fix volume inspection by name in podman\_volume -* Recreate stopped containers if recreate flag is enabled - - -#### f5networks\.f5\_modules - -* bigip\_gtm\_monitor\_bigip \- fixed an issue where IP and port were not applied correctly when creating new monitor\. -* bigip\_gtm\_monitor\_firepass \- fixed an issue where IP and port were not applied correctly when creating new monitor\. -* bigip\_gtm\_monitor\_http \- fixed an issue where IP and port were not applied correctly when creating new monitor\. -* bigip\_gtm\_monitor\_https\- fixed an issue where IP and port were not applied correctly when creating new monitor\. -* bigip\_gtm\_monitor\_tcp \- fixed an issue where IP and port were not applied correctly when creating new monitor\. -* bigip\_gtm\_monitor\_tcp\_half\_open \- fixed an issue where IP and port were not applied correctly when creating new monitor\. -* bigip\_gtm\_topology\_region \- fixed an issue where if multiple states with spaces in values were defined\, module would throw invalid command error -* bigip\_gtm\_topology\_region \- fixed an issue where states names that contained spaces caused the idempotency to break\. -* bigip\_ssl\_key\_cert \- fixed an issue where the passphrase was not being properly send to the BIG\-IP\. - - -#### fortinet\.fortimanager - -* Changed revision to v\_range to reduce the size of the code\. -* Fixed the behavior of module fmgr\_firewall\_internetservicecustom\. -* Fixed the behavior of some modules that contain the argument policyid\. -* Improved example ansible playbooks\. -* Improved the logic of fmgr\_fact\, fmgr\_clone\, fmgr\_rename\, fmgr\_move\. Usage remains unchanged\. -* Reduced the size of module\_arg\_spec in each module\. -* Removed most of the sanity test ignores\. - - -#### fortinet\.fortios - -* Github issue - - -#### lowlydba\.sqlserver - -* Add ActiveStartDate to the compare properties so this item is marked accurately as changed\. -* Fixed the formatting of the SPN by updating the backslash to a forward\-slash for the \$spn var \(lowlydba\.sqlserver\.spn\) - - -#### netapp\.ontap - -* na\_ontap\_igroup\_initiator \- fixed issue with idempotency\. - - -#### netapp\.storagegrid - -* Removed fetch limit in API request and implemented pagination\. - - -#### netbox\.netbox - -* netbox\_vlan \- Fix documentation of vlan\_group \[\#1138\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1138](https\://github\.com/netbox\-community/ansible\_modules/pull/1138)\) - - -### New Plugins - - -#### Callback - -* community\.general\.default\_without\_diff \- The default ansible callback without diff output - - -#### Filter - -* community\.crypto\.parse\_serial \- Convert a serial number as a colon\-separated list of hex numbers to an integer -* community\.crypto\.to\_serial \- Convert an integer to a colon\-separated list of hex numbers -* community\.general\.lists\_difference \- Difference of lists with a predictive order -* community\.general\.lists\_intersect \- Intersection of lists with a predictive order -* community\.general\.lists\_symmetric\_difference \- Symmetric Difference of lists with a predictive order -* community\.general\.lists\_union \- Union of lists with a predictive order - - -### New Modules - - -#### community\.general - -* community\.general\.gitlab\_group\_access\_token \- Manages GitLab group access tokens -* community\.general\.gitlab\_project\_access\_token \- Manages GitLab project access tokens - - -#### containers\.podman - -* containers\.podman\.podman\_secret\_info \- Secrets info module - - -#### fortinet\.fortimanager - -* fortinet\.fortimanager\.fmgr\_diameterfilter\_profile \- Configure Diameter filter profiles\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxysshclientcert \- Configure Access Proxy SSH client certificate\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxysshclientcert\_certextension \- Configure certificate extension for user certificate\. -* fortinet\.fortimanager\.fmgr\_firewall\_vip6\_quic \- QUIC setting\. -* fortinet\.fortimanager\.fmgr\_firewall\_vip\_gslbpublicips \- Publicly accessible IP addresses for the FortiGSLB service\. -* fortinet\.fortimanager\.fmgr\_sctpfilter\_profile \- Configure SCTP filter profiles\. -* fortinet\.fortimanager\.fmgr\_sctpfilter\_profile\_ppidfilters \- PPID filters list\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_managedswitch\_vlan \- Configure VLAN assignment priority\. -* fortinet\.fortimanager\.fmgr\_system\_admin\_profile\_writepasswdprofiles \- Profile list\. -* fortinet\.fortimanager\.fmgr\_system\_admin\_profile\_writepasswduserlist \- User list\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam \- Configure NPU TCAM policies\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_data \- Data fields of TCAM\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_mask \- Mask fields of TCAM\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_miract \- Mirror action of TCAM\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_priact \- Priority action of TCAM\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_sact \- Source action of TCAM\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_nputcam\_tact \- Target action of TCAM\. -* fortinet\.fortimanager\.fmgr\_videofilter\_keyword \- Configure video filter keywords\. -* fortinet\.fortimanager\.fmgr\_videofilter\_keyword\_word \- List of keywords\. -* fortinet\.fortimanager\.fmgr\_videofilter\_profile\_filters \- YouTube filter entries\. -* fortinet\.fortimanager\.fmgr\_videofilter\_youtubekey \- Configure YouTube API keys\. - - -#### hetzner\.hcloud - -* hetzner\.hcloud\.firewall\_resource \- Manage Resources a Hetzner Cloud Firewall is applied to\. - - -#### netbox\.netbox - -* netbox\.netbox\.netbox\_virtual\_disk \- Create\, updates\, or removes a disk from a Virtual Machine - - -### Unchanged Collections - -* ansible\.netcommon \(still version 5\.3\.0\) -* ansible\.posix \(still version 1\.5\.4\) -* ansible\.utils \(still version 2\.12\.0\) -* ansible\.windows \(still version 2\.2\.0\) -* arista\.eos \(still version 6\.2\.2\) -* azure\.azcollection \(still version 1\.19\.0\) -* check\_point\.mgmt \(still version 5\.2\.2\) -* chocolatey\.chocolatey \(still version 1\.5\.1\) -* cisco\.aci \(still version 2\.8\.0\) -* cisco\.asa \(still version 4\.0\.3\) -* cisco\.intersight \(still version 2\.0\.7\) -* cisco\.ios \(still version 5\.3\.0\) -* cisco\.iosxr \(still version 6\.1\.1\) -* cisco\.ise \(still version 2\.7\.0\) -* cisco\.meraki \(still version 2\.17\.2\) -* cisco\.mso \(still version 2\.5\.0\) -* cisco\.nxos \(still version 5\.3\.0\) -* cisco\.ucs \(still version 1\.10\.0\) -* cloud\.common \(still version 2\.1\.4\) -* cloudscale\_ch\.cloud \(still version 2\.3\.1\) -* community\.aws \(still version 7\.1\.0\) -* community\.azure \(still version 2\.0\.0\) -* community\.ciscosmb \(still version 1\.0\.7\) -* community\.digitalocean \(still version 1\.26\.0\) -* community\.hashi\_vault \(still version 6\.1\.0\) -* community\.hrobot \(still version 1\.9\.0\) -* community\.library\_inventory\_filtering\_v1 \(still version 1\.0\.0\) -* community\.libvirt \(still version 1\.3\.0\) -* community\.network \(still version 5\.0\.2\) -* community\.okd \(still version 2\.3\.0\) -* community\.proxysql \(still version 1\.5\.1\) -* community\.rabbitmq \(still version 1\.2\.3\) -* community\.sap \(still version 2\.0\.0\) -* community\.sap\_libs \(still version 1\.4\.2\) -* community\.sops \(still version 1\.6\.7\) -* community\.windows \(still version 2\.1\.0\) -* community\.zabbix \(still version 2\.3\.1\) -* cyberark\.conjur \(still version 1\.2\.2\) -* cyberark\.pas \(still version 1\.0\.25\) -* dellemc\.enterprise\_sonic \(still version 2\.4\.0\) -* dellemc\.openmanage \(still version 8\.7\.0\) -* dellemc\.powerflex \(still version 2\.1\.0\) -* dellemc\.unity \(still version 1\.7\.1\) -* frr\.frr \(still version 2\.0\.2\) -* gluster\.gluster \(still version 1\.0\.2\) -* google\.cloud \(still version 1\.3\.0\) -* hpe\.nimble \(still version 1\.1\.4\) -* ibm\.qradar \(still version 2\.1\.0\) -* ibm\.spectrum\_virtualize \(still version 2\.0\.0\) -* ibm\.storage\_virtualize \(still version 2\.2\.0\) -* infoblox\.nios\_modules \(still version 1\.6\.1\) -* inspur\.ispim \(still version 2\.2\.0\) -* inspur\.sm \(still version 2\.3\.0\) -* junipernetworks\.junos \(still version 5\.3\.1\) -* microsoft\.ad \(still version 1\.4\.1\) -* netapp\.aws \(still version 21\.7\.1\) -* netapp\.azure \(still version 21\.10\.1\) -* netapp\.cloudmanager \(still version 21\.22\.1\) -* netapp\.elementsw \(still version 21\.7\.0\) -* netapp\.um\_info \(still version 21\.8\.1\) -* netapp\_eseries\.santricity \(still version 1\.4\.0\) -* ngine\_io\.cloudstack \(still version 2\.3\.0\) -* ngine\_io\.exoscale \(still version 1\.1\.0\) -* openstack\.cloud \(still version 2\.2\.0\) -* openvswitch\.openvswitch \(still version 2\.1\.1\) -* ovirt\.ovirt \(still version 3\.2\.0\) -* purestorage\.flasharray \(still version 1\.26\.0\) -* purestorage\.flashblade \(still version 1\.15\.0\) -* sensu\.sensu\_go \(still version 1\.14\.0\) -* splunk\.es \(still version 2\.1\.2\) -* t\_systems\_mms\.icinga\_director \(still version 2\.0\.1\) -* telekom\_mms\.icinga\_director \(still version 1\.35\.0\) -* theforeman\.foreman \(still version 3\.15\.0\) -* vmware\.vmware\_rest \(still version 2\.3\.1\) -* vultr\.cloud \(still version 1\.12\.1\) -* vyos\.vyos \(still version 4\.1\.0\) -* wti\.remote \(still version 1\.0\.5\) - - -## v9\.2\.0 - -- Release Summary -- Added Collections -- Ansible\-core -- Changed Collections -- Major Changes - - community\.docker - - community\.hashi\_vault - - dellemc\.openmanage - - infoblox\.nios\_modules -- Minor Changes - - amazon\.aws - - check\_point\.mgmt - - cisco\.ise - - cisco\.meraki - - community\.aws - - community\.crypto - - community\.digitalocean - - community\.dns - - community\.docker - - community\.general - - community\.grafana - - community\.hrobot - - community\.postgresql - - community\.routeros - - community\.vmware - - community\.zabbix - - dellemc\.enterprise\_sonic - - dellemc\.openmanage - - grafana\.grafana - - ibm\.storage\_virtualize - - netapp\.ontap - - netbox\.netbox - - purestorage\.flasharray - - purestorage\.flashblade - - vultr\.cloud -- Deprecated Features - - community\.dns - - community\.docker - - community\.general - - community\.hrobot -- Security Fixes - - Ansible\-core -- Bugfixes - - Ansible\-core - - amazon\.aws - - check\_point\.mgmt - - cisco\.meraki - - community\.aws - - community\.crypto - - community\.digitalocean - - community\.dns - - community\.docker - - community\.general - - community\.grafana - - community\.postgresql - - community\.sap\_libs - - community\.vmware - - community\.zabbix - - dellemc\.enterprise\_sonic - - dellemc\.openmanage - - fortinet\.fortimanager - - infoblox\.nios\_modules - - netapp\.ontap - - netbox\.netbox - - purestorage\.flasharray - - purestorage\.flashblade - - vultr\.cloud -- Known Issues - - dellemc\.openmanage -- New Plugins - - Connection - - Filter - - Lookup -- New Modules - - check\_point\.mgmt - - community\.digitalocean - - community\.docker - - community\.general - - dellemc\.enterprise\_sonic - - dellemc\.openmanage - - infoblox\.nios\_modules - - netapp\.ontap - - purestorage\.flashblade - - vultr\.cloud -- Unchanged Collections - - -### Release Summary - -Release Date\: 2024\-01\-30 - -[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) - - -### Added Collections - -* community\.library\_inventory\_filtering\_v1 \(version 1\.0\.0\) - - -### Ansible\-core - -Ansible 9\.2\.0 contains ansible\-core version 2\.16\.3\. -This is a newer version than version 2\.16\.1 contained in the previous Ansible release\. - -The changes are reported in the combined changelog below\. - - -### Changed Collections - -If not mentioned explicitly\, the changes are reported in the combined changelog below\. - -| Collection | Ansible 9.1.0 | Ansible 9.2.0 | Notes | -| ---------------------------------------- | ------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| amazon.aws | 7.0.0 | 7.2.0 | | -| awx.awx | 23.5.0 | 23.6.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| check_point.mgmt | 5.1.1 | 5.2.2 | | -| cisco.dnac | 6.8.1 | 6.10.2 | The collection did not have a changelog in this version. | -| cisco.intersight | 2.0.3 | 2.0.7 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| cisco.ise | 2.6.2 | 2.7.0 | | -| cisco.meraki | 2.16.16 | 2.17.2 | | -| community.aws | 7.0.0 | 7.1.0 | | -| community.crypto | 2.16.1 | 2.17.1 | | -| community.digitalocean | 1.24.0 | 1.26.0 | | -| community.dns | 2.6.4 | 2.8.0 | | -| community.docker | 3.4.11 | 3.7.0 | | -| community.general | 8.1.0 | 8.3.0 | | -| community.grafana | 1.6.1 | 1.7.0 | | -| community.hashi_vault | 6.0.0 | 6.1.0 | | -| community.hrobot | 1.8.2 | 1.9.0 | | -| community.library_inventory_filtering_v1 | | 1.0.0 | The collection was added to Ansible | -| community.postgresql | 3.2.0 | 3.3.0 | | -| community.routeros | 2.11.0 | 2.12.0 | | -| community.sap_libs | 1.4.1 | 1.4.2 | | -| community.vmware | 4.0.1 | 4.1.0 | | -| community.zabbix | 2.2.0 | 2.3.1 | | -| cyberark.pas | 1.0.23 | 1.0.25 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| dellemc.enterprise_sonic | 2.2.0 | 2.4.0 | | -| dellemc.openmanage | 8.5.0 | 8.7.0 | | -| fortinet.fortimanager | 2.3.0 | 2.3.1 | | -| grafana.grafana | 2.2.3 | 2.2.4 | | -| ibm.storage_virtualize | 2.1.0 | 2.2.0 | | -| infoblox.nios_modules | 1.5.0 | 1.6.1 | | -| netapp.ontap | 22.8.3 | 22.9.0 | | -| netbox.netbox | 3.15.0 | 3.16.0 | | -| purestorage.flasharray | 1.24.0 | 1.26.0 | | -| purestorage.flashblade | 1.14.0 | 1.15.0 | | -| vultr.cloud | 1.10.1 | 1.12.1 | | - - -### Major Changes - - -#### community\.docker - -* The community\.docker collection now depends on the community\.library\_inventory\_filtering\_v1 collection\. This utility collection provides host filtering functionality for inventory plugins\. If you use the Ansible community package\, both collections are included and you do not have to do anything special\. If you install the collection with ansible\-galaxy collection install\, it will be installed automatically\. If you install the collection by copying the files of the collection to a place where ansible\-core can find it\, for example by cloning the git repository\, you need to make sure that you also have to install the dependency if you are using the inventory plugins \([https\://github\.com/ansible\-collections/community\.docker/pull/698](https\://github\.com/ansible\-collections/community\.docker/pull/698)\)\. - - -#### community\.hashi\_vault - -* requirements \- the requests package which is required by hvac now has a more restrictive range for this collection in certain use cases due to breaking security changes in ansible\-core that were backported \([https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416](https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416)\)\. - - -#### dellemc\.openmanage - -* All OME modules are enhanced to support the environment variables OME\_USERNAME and OME\_PASSWORD as fallback for credentials\. -* All iDRAC and Redfish modules are enhanced to support the environment variables IDRAC\_USERNAME and IDRAC\_PASSWORD as fallback for credentials\. -* idrac\_certificates \- The module is enhanced to support the import and export of CUSTOMCERTIFICATE\. -* idrac\_gather\_facts \- This role is enhanced to support secure boot\. -* idrac\_license \- The module is introduced to configure iDRAC licenses\. - - -#### infoblox\.nios\_modules - -* Upgrade Ansible version support from 2\.13 to 2\.16\. -* Upgrade Python version support from 3\.8 to 3\.10\. - - -### Minor Changes - - -#### amazon\.aws - -* autoscaling\_group \- minor PEP8 whitespace sanity fixes \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1846](https\://github\.com/ansible\-collections/amazon\.aws/pull/1846)\)\. -* ec2\_ami\_info \- simplify parameters to get\_image\_attribute to only pass ID of image \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1846](https\://github\.com/ansible\-collections/amazon\.aws/pull/1846)\)\. -* ec2\_eip \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) -* ec2\_instance \- Add support for modifying metadata options of an existing instance \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1918](https\://github\.com/ansible\-collections/amazon\.aws/pull/1918)\)\. -* ec2\_instance \- add support for AdditionalInfo option when creating an instance \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1828](https\://github\.com/ansible\-collections/amazon\.aws/pull/1828)\)\. -* ec2\_security\_group \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1844](https\://github\.com/ansible\-collections/amazon\.aws/pull/1844)\) -* ec2\_vpc\_igw \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) -* ec2\_vpc\_route\_table \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) -* ec2\_vpc\_subnet \- the default value for tags has been changed from \{\} to None\, to remove tags from a subnet an empty map must be explicitly passed to the module \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1876](https\://github\.com/ansible\-collections/amazon\.aws/pull/1876)\)\. -* ec2\_vpc\_subnet \- use ResourceTags to set initial tags upon creation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1843](https\://github\.com/ansible\-collections/amazon\.aws/issues/1843)\) -* 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](https\://github\.com/ansible\-collections/amazon\.aws/pull/1848)\)\. -* iam\_group \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_group \- group\_name has been added as an alias to name for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_group \- add support for setting group path \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1892](https\://github\.com/ansible\-collections/amazon\.aws/pull/1892)\)\. -* iam\_group \- adds attached\_policies return value \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1892](https\://github\.com/ansible\-collections/amazon\.aws/pull/1892)\)\. -* iam\_group \- code refactored to avoid single long function \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1892](https\://github\.com/ansible\-collections/amazon\.aws/pull/1892)\)\. -* iam\_instance\_profile \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_instance\_profile \- attempting to change the path for an existing profile will now generate a warning\, previously this was silently ignored \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_instance\_profile \- the prefix parameter has been renamed path for consistency with other IAM modules\, prefix remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_instance\_profile \- the default value for path has been removed\. New instances will still be created with a default path of /\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_managed\_policy \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_managed\_policy \- description attempting to update the description now results in a warning\, previously it was simply ignored \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. -* iam\_managed\_policy \- policy is no longer a required parameter \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. -* iam\_managed\_policy \- added support for tagging managed policies \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. -* iam\_managed\_policy \- more consistently perform retries on rate limiting errors \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. -* iam\_managed\_policy \- support for setting path \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. -* iam\_managed\_policy \- the policy\_description parameter has been renamed description for consistency with other IAM modules\, policy\_description remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_managed\_policy \- the policy\_name parameter has been renamed name for consistency with other IAM modules\, policy\_name remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_role \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_role \- prefix and path\_prefix have been added as aliases to path for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_role \- role\_name has been added as an alias to name for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_role \- attempting to change the path for an existing profile will now generate a warning\, previously this was silently ignored \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_role \- the default value for path has been removed\. New roles will still be created with a default path of /\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_role\_info \- path and prefix have been added as aliases to path\_prefix for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_user \- Basic testing of name and path has been added to improve error messages \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_user \- user\_name has been added as an alias to name for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_user \- add boundary parameter to support managing boundary policy on users \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. -* iam\_user \- add path parameter to support managing user path \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. -* iam\_user \- added attached\_policies to return value \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. -* iam\_user \- refactored code to reduce complexity \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1912](https\://github\.com/ansible\-collections/amazon\.aws/pull/1912)\)\. -* iam\_user\_info \- prefix has been added as an alias to path\_prefix for consistency with other IAM modules \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* iam\_user\_info \- the path parameter has been renamed path\_prefix for consistency with other IAM modules\, path remains as an alias\. No change to playbooks is required \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1933](https\://github\.com/ansible\-collections/amazon\.aws/pull/1933)\)\. -* rds\_instance\_snapshot \- minor PEP8 whitespace sanity fixes \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1846](https\://github\.com/ansible\-collections/amazon\.aws/pull/1846)\)\. - - -#### check\_point\.mgmt - -* New resource modules for R81\.20 JHF Take 43 -* meta/runtime\.yml \- update minimum Ansible version required to 2\.14\.0\. - - -#### cisco\.ise - -* cisco\.ise collection now supports ansible\.utils v3 - - -#### cisco\.meraki - -* Adding support to ansible\.utils \"\>\=2\.0\.0\, \<4\.00\"\. - - -#### community\.aws - -* aws\_ssm \- Updated the documentation to explicitly state that an S3 bucket is required\, the behavior of the files in that bucket\, and requirements around that\. \([https\://github\.com/ansible\-collections/community\.aws/issues/1775](https\://github\.com/ansible\-collections/community\.aws/issues/1775)\)\. -* cloudfront\_distribution \- added support for cache\_policy\_id and origin\_request\_policy\_id for behaviors \([https\://github\.com/ansible\-collections/community\.aws/pull/1589](https\://github\.com/ansible\-collections/community\.aws/pull/1589)\) -* mq\_broker \- add support to wait for broker state via wait and wait\_timeout parameter values \([https\://github\.com/ansible\-collections/community\.aws/pull/1879](https\://github\.com/ansible\-collections/community\.aws/pull/1879)\)\. - - -#### community\.crypto - -* luks\_device \- add allow discards option \([https\://github\.com/ansible\-collections/community\.crypto/pull/693](https\://github\.com/ansible\-collections/community\.crypto/pull/693)\)\. - - -#### community\.digitalocean - -* digital\_ocean\_kubernetes \- add project\_name parameter \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/264](https\://github\.com/ansible\-collections/community\.digitalocean/issues/264)\)\. -* fix sanity tests \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/323](https\://github\.com/ansible\-collections/community\.digitalocean/issues/323)\)\. - - -#### community\.dns - -* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the filters option has been renamed to simple\_filters\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the community\.library\_inventory\_filtering\_v1 collection\'s functionality \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\. -* nameserver\_info and nameserver\_record\_info \- add server parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/168](https\://github\.com/ansible\-collections/community\.dns/pull/168)\, [https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\. -* wait\_for\_txt \- add server parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\. - - -#### community\.docker - -* The ca\_cert option available to almost all modules and plugins has been renamed to ca\_path\. The name ca\_path is also used for similar options in ansible\-core and other collections\. The old name has been added as an alias and can still be used \([https\://github\.com/ansible\-collections/community\.docker/pull/744](https\://github\.com/ansible\-collections/community\.docker/pull/744)\)\. -* The docker\_stack\* modules now use the common CLI\-based module code added for the docker\_image\_build and docker\_compose\_v2 modules\. This means that the modules now have various more configuration options with respect to talking to the Docker Daemon\, and now also are part of the community\.docker\.docker and docker module default groups \([https\://github\.com/ansible\-collections/community\.docker/pull/745](https\://github\.com/ansible\-collections/community\.docker/pull/745)\)\. -* docker\_compose\_v2 \- add scale option to allow to explicitly scale services \([https\://github\.com/ansible\-collections/community\.docker/pull/776](https\://github\.com/ansible\-collections/community\.docker/pull/776)\)\. -* docker\_compose\_v2\, docker\_compose\_v2\_pull \- support files parameter to specify multiple Compose files \([https\://github\.com/ansible\-collections/community\.docker/issues/772](https\://github\.com/ansible\-collections/community\.docker/issues/772)\, [https\://github\.com/ansible\-collections/community\.docker/pull/775](https\://github\.com/ansible\-collections/community\.docker/pull/775)\)\. -* docker\_container \- add networks\[\]\.mac\_address option for Docker API 1\.44\+\. Note that Docker API 1\.44 no longer uses the global mac\_address option\, this new option is the only way to set the MAC address for a container \([https\://github\.com/ansible\-collections/community\.docker/pull/763](https\://github\.com/ansible\-collections/community\.docker/pull/763)\)\. -* docker\_container \- implement better platform string comparisons to improve idempotency \([https\://github\.com/ansible\-collections/community\.docker/issues/654](https\://github\.com/ansible\-collections/community\.docker/issues/654)\, [https\://github\.com/ansible\-collections/community\.docker/pull/705](https\://github\.com/ansible\-collections/community\.docker/pull/705)\)\. -* docker\_container \- internal refactorings which allow comparisons to use more information like details of the current image or the Docker host config \([https\://github\.com/ansible\-collections/community\.docker/pull/713](https\://github\.com/ansible\-collections/community\.docker/pull/713)\)\. -* docker\_image \- allow to specify labels and /dev/shm size when building images \([https\://github\.com/ansible\-collections/community\.docker/issues/726](https\://github\.com/ansible\-collections/community\.docker/issues/726)\, [https\://github\.com/ansible\-collections/community\.docker/pull/727](https\://github\.com/ansible\-collections/community\.docker/pull/727)\)\. -* docker\_image \- allow to specify memory size and swap memory size in other units than bytes \([https\://github\.com/ansible\-collections/community\.docker/pull/727](https\://github\.com/ansible\-collections/community\.docker/pull/727)\)\. -* inventory plugins \- add filter option which allows to include and exclude hosts based on Jinja2 conditions \([https\://github\.com/ansible\-collections/community\.docker/pull/698](https\://github\.com/ansible\-collections/community\.docker/pull/698)\, [https\://github\.com/ansible\-collections/community\.docker/issues/610](https\://github\.com/ansible\-collections/community\.docker/issues/610)\)\. - - -#### community\.general - -* consul\_auth\_method\, consul\_binding\_rule\, consul\_policy\, consul\_role\, consul\_session\, consul\_token \- added action group community\.general\.consul \([https\://github\.com/ansible\-collections/community\.general/pull/7897](https\://github\.com/ansible\-collections/community\.general/pull/7897)\)\. -* consul\_policy \- added support for diff and check mode \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. -* consul\_policy\, consul\_role\, consul\_session \- removed dependency on requests and factored out common parts \([https\://github\.com/ansible\-collections/community\.general/pull/7826](https\://github\.com/ansible\-collections/community\.general/pull/7826)\, [https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. -* consul\_role \- node\_identities now expects a node\_name option to match the Consul API\, the old name is still supported as alias \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. -* consul\_role \- service\_identities now expects a service\_name option to match the Consul API\, the old name is still supported as alias \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. -* consul\_role \- added support for diff mode \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. -* consul\_role \- added support for templated policies \([https\://github\.com/ansible\-collections/community\.general/pull/7878](https\://github\.com/ansible\-collections/community\.general/pull/7878)\)\. -* ipa\_dnsrecord \- adds ability to manage NS record types \([https\://github\.com/ansible\-collections/community\.general/pull/7737](https\://github\.com/ansible\-collections/community\.general/pull/7737)\)\. -* ipa\_pwpolicy \- refactor module and exchange a sequence if statements with a for loop \([https\://github\.com/ansible\-collections/community\.general/pull/7723](https\://github\.com/ansible\-collections/community\.general/pull/7723)\)\. -* ipa\_pwpolicy \- update module to support maxrepeat\, maxsequence\, dictcheck\, usercheck\, gracelimit parameters in FreeIPA password policies \([https\://github\.com/ansible\-collections/community\.general/pull/7723](https\://github\.com/ansible\-collections/community\.general/pull/7723)\)\. -* keycloak\_realm\_key \- the config\.algorithm option now supports 8 additional key algorithms \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\. -* keycloak\_realm\_key \- the config\.certificate option value is no longer defined with no\_log\=True \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\. -* keycloak\_realm\_key \- the provider\_id option now supports RSA encryption key usage \(value rsa\-enc\) \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\. -* keycloak\_user\_federation \- allow custom user storage providers to be set through provider\_id \([https\://github\.com/ansible\-collections/community\.general/pull/7789](https\://github\.com/ansible\-collections/community\.general/pull/7789)\)\. -* mail \- add Message\-ID header\; which is required by some mail servers \([https\://github\.com/ansible\-collections/community\.general/pull/7740](https\://github\.com/ansible\-collections/community\.general/pull/7740)\)\. -* mail module\, mail callback plugin \- allow to configure the domain name of the Message\-ID header with a new message\_id\_domain option \([https\://github\.com/ansible\-collections/community\.general/pull/7765](https\://github\.com/ansible\-collections/community\.general/pull/7765)\)\. -* redfish\_info \- add command GetServiceIdentification to get service identification \([https\://github\.com/ansible\-collections/community\.general/issues/7882](https\://github\.com/ansible\-collections/community\.general/issues/7882)\)\. -* ssh\_config \- new feature to set AddKeysToAgent option to yes or no \([https\://github\.com/ansible\-collections/community\.general/pull/7703](https\://github\.com/ansible\-collections/community\.general/pull/7703)\)\. -* ssh\_config \- new feature to set IdentitiesOnly option to yes or no \([https\://github\.com/ansible\-collections/community\.general/pull/7704](https\://github\.com/ansible\-collections/community\.general/pull/7704)\)\. -* terraform \- add support for diff\_mode for terraform resource\_changes \([https\://github\.com/ansible\-collections/community\.general/pull/7896](https\://github\.com/ansible\-collections/community\.general/pull/7896)\)\. -* xcc\_redfish\_command \- added support for raw POSTs \(command\=PostResource in category\=Raw\) without a specific action info \([https\://github\.com/ansible\-collections/community\.general/pull/7746](https\://github\.com/ansible\-collections/community\.general/pull/7746)\)\. - - -#### community\.grafana - -* Add Quickwit search engine datasource \([https\://quickwit\.io](https\://quickwit\.io)\)\. -* Add parameter org\_name to grafana\_dashboard -* Add parameter org\_name to grafana\_datasource -* Add parameter org\_name to grafana\_organization\_user -* Add support for Grafana Tempo datasource type \([https\://grafana\.com/docs/grafana/latest/datasources/tempo/](https\://grafana\.com/docs/grafana/latest/datasources/tempo/)\) -* default to true/false in docs and code - - -#### community\.hrobot - -* robot inventory plugin \- the filters option has been renamed to simple\_filters\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the community\.library\_inventory\_filtering\_v1 collection\'s functionality \([https\://github\.com/ansible\-collections/community\.hrobot/pull/94](https\://github\.com/ansible\-collections/community\.hrobot/pull/94)\)\. - - -#### community\.postgresql - -* postgresql\_db \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/614](https\://github\.com/ansible\-collections/community\.postgresql/issues/614)\)\. -* postgresql\_ext \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. -* postgresql\_publication \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. -* postgresql\_schema \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. -* postgresql\_subscription \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. -* postgresql\_tablespace \- add the comment argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\. - - -#### community\.routeros - -* api\_info\, api\_modify \- add interface ovpn\-client path \([https\://github\.com/ansible\-collections/community\.routeros/issues/242](https\://github\.com/ansible\-collections/community\.routeros/issues/242)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/244](https\://github\.com/ansible\-collections/community\.routeros/pull/244)\)\. -* api\_info\, api\_modify \- add radius path \([https\://github\.com/ansible\-collections/community\.routeros/issues/241](https\://github\.com/ansible\-collections/community\.routeros/issues/241)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/245](https\://github\.com/ansible\-collections/community\.routeros/pull/245)\)\. -* api\_info\, api\_modify \- add routing rule path \([https\://github\.com/ansible\-collections/community\.routeros/issues/162](https\://github\.com/ansible\-collections/community\.routeros/issues/162)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/246](https\://github\.com/ansible\-collections/community\.routeros/pull/246)\)\. -* api\_info\, api\_modify \- add missing path routing bgp template \([https\://github\.com/ansible\-collections/community\.routeros/pull/243](https\://github\.com/ansible\-collections/community\.routeros/pull/243)\)\. -* api\_info\, api\_modify \- add support for the tx\-power attribute in interface wireless \([https\://github\.com/ansible\-collections/community\.routeros/pull/239](https\://github\.com/ansible\-collections/community\.routeros/pull/239)\)\. -* api\_info\, api\_modify \- removed host primary key in tool netwatch path \([https\://github\.com/ansible\-collections/community\.routeros/pull/248](https\://github\.com/ansible\-collections/community\.routeros/pull/248)\)\. -* api\_modify\, api\_info \- added support for interface wifiwave2 \([https\://github\.com/ansible\-collections/community\.routeros/pull/226](https\://github\.com/ansible\-collections/community\.routeros/pull/226)\)\. - - -#### community\.vmware - -* vmware\_guest \- Add IPv6 support for VM network interfaces \([https\://github\.com/ansible\-collections/community\.vmware/pull/1937](https\://github\.com/ansible\-collections/community\.vmware/pull/1937)\)\. -* vmware\_guest\_sendkey \- Add Windows key \([https\://github\.com/ansible\-collections/community\.vmware/issues/1959](https\://github\.com/ansible\-collections/community\.vmware/issues/1959)\)\. -* vmware\_guest\_tools\_upgrade \- Add parameter installer\_options to pass command line options to the installer to modify the installation procedure for tools \([https\://github\.com/ansible\-collections/community\.vmware/pull/1059](https\://github\.com/ansible\-collections/community\.vmware/pull/1059)\)\. - - -#### community\.zabbix - -* api\_requests \- Handled error from depricated CertificateError class -* multiple roles \- Removed unneeded Apt Clean commands\. -* proxy role \- Updated MariaDB version for Centos 7 to 10\.11 -* zabbix web \- Allowed the independent configuration of php\-fpm without creating vhost\. -* zabbix\_host\_info \- added ability to get all the hosts configured in Zabbix -* zabbix\_proxy role \- Add variable zabbix\_proxy\_dbpassword\_hash\_method to control whether you want postgresql user password to be hashed with md5 or want to use db default\. When zabbix\_proxy\_dbpassword\_hash\_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram\-sha\-256 hashing method\. -* zabbix\_server role \- Add variable zabbix\_server\_dbpassword\_hash\_method to control whether you want postgresql user password to be hashed with md5 or want to use db default\. When zabbix\_server\_dbpassword\_hash\_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram\-sha\-256 hashing method\. -* zabbix\_templategroup module added - - -#### dellemc\.enterprise\_sonic - -* sonic\_aaa \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304)\)\. -* sonic\_aaa \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_acl\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306)\)\. -* sonic\_acl\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_bgp\_as\_paths \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/290](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/290)\)\. -* sonic\_bgp\_communities \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/251](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/251)\)\. -* sonic\_bgp\_ext\_communities \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/252](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/252)\)\. -* sonic\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301)\)\. -* sonic\_interfaces \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. -* sonic\_interfaces \- Change deleted design for interfaces module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/310](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/310)\)\. -* sonic\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_ip\_neighbor \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285)\)\. -* sonic\_ip\_neighbor \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_l2\_acls \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306)\)\. -* sonic\_l2\_acls \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_l2\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303)\)\. -* sonic\_l2\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_l3\_acls \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/306)\)\. -* sonic\_l3\_acls \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_l3\_interfaces \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/241](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/241)\)\. -* sonic\_lag\_interfaces \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/303)\)\. -* sonic\_lag\_interfaces \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_logging \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285)\)\. -* sonic\_logging \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_mclag \- Add VLAN range support for \'unique\_ip\' and \'peer\_gateway\' options \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288)\)\. -* sonic\_mclag \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/288)\)\. -* sonic\_ntp \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281)\)\. -* sonic\_ntp \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_port\_breakout \- Add Ansible support for all port breakout modes now allowed in Enterprise SONiC \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/276](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/276)\)\. -* sonic\_port\_breakout \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/291](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/291)\)\. -* sonic\_port\_group \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284)\)\. -* sonic\_port\_group \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_radius\_server \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/279](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/279)\)\. -* sonic\_radius\_server \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_static\_routes \- Add playbook check and diff modes support for static routes resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/313](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/313)\)\. -* sonic\_static\_routes \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_system \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/284)\)\. -* sonic\_system \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_tacacs\_server \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/281)\)\. -* sonic\_tacacs\_server \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_users \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/304)\)\. -* sonic\_users \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_vlans \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/301)\)\. -* sonic\_vlans \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* sonic\_vrfs \- Add mgmt VRF replaced state handling to sonic\_vrfs module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/298](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/298)\)\. -* sonic\_vrfs \- Add mgmt VRF support to sonic\_vrfs module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/293](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/293)\)\. -* sonic\_vrfs \- Add support for playbook check and diff modes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/285)\)\. -* sonic\_vrfs \- Enhance config diff generation function \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/318)\)\. -* tests \- Add UTs for BFD\, COPP\, and MAC modules \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/287](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/287)\)\. -* tests \- Enable contiguous execution of all regression integration tests on an S5296f \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/277](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/277)\)\. -* tests \- Fix the bgp CLI test base\_cfg\_path derivation of the bgp role\_path by avoiding relative pathing from the possibly external playbook\_dir \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/283](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/283)\)\. - - -#### dellemc\.openmanage - -* For idrac\_certificate role\, added support for import operation of HTTPS certificate with the SSL key\. -* For idrac\_certificates module\, below enhancements are made\: Added support for import operation of HTTPS certificate with the SSL key\. The email\_address has been made as an optional parameter\. -* For idrac\_gather\_facts role\, added storage controller details in the role output\. - - -#### grafana\.grafana - -* Bump cryptography from 41\.0\.4 to 41\.0\.6 by \@dependabot in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/126](https\://github\.com/grafana/grafana\-ansible\-collection/pull/126) -* Drop curl check by \@v\-zhuravlev in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/120](https\://github\.com/grafana/grafana\-ansible\-collection/pull/120) -* Fix check mode for grafana role by \@Boschung\-Mecatronic\-AG\-Infrastructure in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/125](https\://github\.com/grafana/grafana\-ansible\-collection/pull/125) -* Fix check mode in Grafana Agent by \@AmandaCameron in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/124](https\://github\.com/grafana/grafana\-ansible\-collection/pull/124) -* Update tags in README by \@ishanjainn in [https\://github\.com/grafana/grafana\-ansible\-collection/pull/121](https\://github\.com/grafana/grafana\-ansible\-collection/pull/121) - - -#### ibm\.storage\_virtualize - -* ibm\_sv\_manage\_replication\_policy \- Added support to configure a 2\-site\-ha policy\. -* ibm\_sv\_manage\_snapshot \- Added support to restore entire volumegroup from a snapshot of that volumegroup\. -* ibm\_svc\_host \- Added support to create nvmetcp host\. -* ibm\_svc\_info \- Added support to display information about thinclone/clone volumes and volumegroups\. -* ibm\_svc\_manage\_volumgroup \- Added support to delete volumegroups keeping volumes via \'evictvolumes\'\. - - -#### netapp\.ontap - -* na\_ontap\_cifs\_server \- new option lm\_compatibility\_level added in REST\, requires ONTAP 9\.8 or later\. -* na\_ontap\_cluster \- new option certificate\.uuid added in REST\, requires ONTAP 9\.10 or later\. -* na\_ontap\_cluster\_peer \- added REST only support for modifying remote intercluster addresses in cluster peer relation\. -* na\_ontap\_ems\_destination \- new options syslog\, port\, transport\, message\_format\, timestamp\_format\_override and hostname\_format\_override added in REST\, requires ONTAP 9\.12\.1 or later\. -* na\_ontap\_s3\_services \- create\, modify S3 service returns s3\_service\_info in module output\. -* na\_ontap\_snapmirror \- updated resync and resume operation for synchronous snapmirror relationship in REST\. - - -#### netbox\.netbox - -* nb\_inventory \- Add facility group\_by option \[\#1059\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1059](https\://github\.com/netbox\-community/ansible\_modules/pull/1059)\) -* nb\_inventory \- Enable ansible\-vault strings in config\-context data \[\#1114\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1114](https\://github\.com/netbox\-community/ansible\_modules/pull/1114)\) -* netbox\_platform \- Add config\_template option to netbox\_platform \[\#1119\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1119](https\://github\.com/netbox\-community/ansible\_modules/pull/1119)\) -* netbox\_power\_port\_template \- Add option module\_type to netbox\_power\_port\_template \[\#1105\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1105](https\://github\.com/netbox\-community/ansible\_modules/pull/1105)\) - - -#### purestorage\.flasharray - -* all \- distro package added as a pre\-requisite -* multiple \- Remove packaging pre\-requisite\. -* multiple \- Where only REST 2\.x endpoints are used\, convert to REST 2\.x methodology\. -* purefa\_info \- Expose NFS security flavor for policies -* purefa\_info \- Expose cloud capacity details if array is a Cloud Block Store\. -* purefa\_policy \- Add SMB user based enumeration parameter -* purefa\_policy \- Added NFS security flavors for accessing files in the mount point\. -* purefa\_policy \- Remove default setting for nfs\_version to allow for change of version at policy level - - -#### purestorage\.flashblade - -* purefb\_bucket \- Add support for public buckets -* purefb\_bucket \- From REST 2\.12 the mode parameter default changes to multi\-site\-writable\. -* purefb\_fs \- Added SMB Continuous Availability parameter\. Requires REST 2\.12 or higher\. -* purefb\_info \- Added enhanced information for buckets\, filesystems and snapshots\, based on new features in REST 2\.12 -* purefb\_s3acc \- Add support for public buckets -* purefb\_s3acc \- Remove default requirements for hard\_limit and default\_hard\_limit - - -#### vultr\.cloud - -* Added retry on HTTP 504 returned by the API \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/104](https\://github\.com/vultr/ansible\-collection\-vultr/pull/104)\)\. -* Implemented a feature to distinguish resources by region if available\. This allows to have identical name per region e\.g\. a VPC named default in each region\. \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/98](https\://github\.com/vultr/ansible\-collection\-vultr/pull/98)\)\. -* instance \- Added a new param user\_scheme to change user scheme to non\-root on Linux while creating the instance \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/96](https\://github\.com/vultr/ansible\-collection\-vultr/issues/96)\)\. - - -### Deprecated Features - - -#### community\.dns - -* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the filters option has been renamed to simple\_filters\. The old name will stop working in community\.hrobot 2\.0\.0 \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\. - - -#### community\.docker - -* docker\_container \- the default ignore for the image\_name\_mismatch parameter has been deprecated and will switch to recreate in community\.docker 4\.0\.0\. A deprecation warning will be printed in situations where the default value is used and where a behavior would change once the default changes \([https\://github\.com/ansible\-collections/community\.docker/pull/703](https\://github\.com/ansible\-collections/community\.docker/pull/703)\)\. - - -#### community\.general - -* consul\_acl \- the module has been deprecated and will be removed in community\.general 10\.0\.0\. consul\_token and consul\_policy can be used instead \([https\://github\.com/ansible\-collections/community\.general/pull/7901](https\://github\.com/ansible\-collections/community\.general/pull/7901)\)\. - - -#### community\.hrobot - -* robot inventory plugin \- the filters option has been renamed to simple\_filters\. The old name will stop working in community\.hrobot 2\.0\.0 \([https\://github\.com/ansible\-collections/community\.hrobot/pull/94](https\://github\.com/ansible\-collections/community\.hrobot/pull/94)\)\. - - -### Security Fixes - - -#### Ansible\-core - -* ANSIBLE\_NO\_LOG \- Address issue where ANSIBLE\_NO\_LOG was ignored \(CVE\-2024\-0690\) - - -### Bugfixes - - -#### Ansible\-core - -* Run all handlers with the same listen topic\, even when notified from another handler \([https\://github\.com/ansible/ansible/issues/82363](https\://github\.com/ansible/ansible/issues/82363)\)\. -* ansible\-galaxy role import \- fix using the role\_name in a standalone role\'s galaxy\_info metadata by disabling automatic removal of the ansible\-role\- prefix\. This matches the behavior of the Galaxy UI which also no longer implicitly removes the ansible\-role\- prefix\. Use the \-\-role\-name option or add a role\_name to the galaxy\_info dictionary in the role\'s meta/main\.yml to use an alternate role name\. -* ansible\-test sanity \-\-test runtime\-metadata \- add action\_plugin as a valid field for modules in the schema \([https\://github\.com/ansible/ansible/pull/82562](https\://github\.com/ansible/ansible/pull/82562)\)\. -* ansible\-config init will now dedupe ini entries from plugins\. -* ansible\-galaxy role import \- exit with 1 when the import fails \([https\://github\.com/ansible/ansible/issues/82175](https\://github\.com/ansible/ansible/issues/82175)\)\. -* ansible\-galaxy role install \- normalize tarfile paths and symlinks using ansible\.utils\.path\.unfrackpath and consider them valid as long as the realpath is in the tarfile\'s role directory \([https\://github\.com/ansible/ansible/issues/81965](https\://github\.com/ansible/ansible/issues/81965)\)\. -* delegate\_to when set to an empty or undefined variable will now give a proper error\. -* dwim functions for lookups should be better at detectging role context even in abscense of tasks/main\. -* roles\, code cleanup and performance optimization of dependencies\, now cached\, and public setting is now determined once\, at role instantiation\. -* roles\, the static property is now correctly set\, this will fix issues with public and DEFAULT\_PRIVATE\_ROLE\_VARS controls on exporting vars\. -* unsafe data \- Address an incompatibility when iterating or getting a single index from AnsibleUnsafeBytes -* unsafe data \- Address an incompatibility with AnsibleUnsafeText and AnsibleUnsafeBytes when pickling with protocol\=0 -* unsafe data \- Enable directly using AnsibleUnsafeText with Python pathlib \([https\://github\.com/ansible/ansible/issues/82414](https\://github\.com/ansible/ansible/issues/82414)\) - - -#### amazon\.aws - -* ec2\_vpc\_subnet \- cleanly handle failure when subnet isn\'t created in time \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1848](https\://github\.com/ansible\-collections/amazon\.aws/pull/1848)\)\. -* iam\_managed\_policy \- fixed an issue where only partial results were returned \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\. -* s3\_object \- Fix typo that caused false deprecation warning when setting overwrite\=latest \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1847](https\://github\.com/ansible\-collections/amazon\.aws/pull/1847)\)\. -* 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](https\://github\.com/ansible\-collections/amazon\.aws/issues/1881)\)\. - - -#### check\_point\.mgmt - -* httpapi/checkpoint\.py \- Raise a fatal error if login wasn\'t successful\. - - -#### cisco\.meraki - -* Adding smartquotes \= False to conf\.py and romoving \' from rst files\. -* Adding build\_ignore property to galaxy file\. -* Adding support to ansible\.utils \>\=3\.0 - - -#### community\.aws - -* aws\_ssm \- disable enable\-bracketed\-paste to fix issue with amazon linux 2023 and other OSes \([https\://github\.com/ansible\-collections/community\.aws/issues/1756](https\://github\.com/ansible\-collections/community\.aws/issues/1756)\) - - -#### community\.crypto - -* acme\_\* modules \- directly react on bad return data for account creation/retrieval/updating requests \([https\://github\.com/ansible\-collections/community\.crypto/pull/682](https\://github\.com/ansible\-collections/community\.crypto/pull/682)\)\. -* acme\_\* modules \- fix improved error reporting in case of socket errors\, bad status lines\, and unknown connection errors \([https\://github\.com/ansible\-collections/community\.crypto/pull/684](https\://github\.com/ansible\-collections/community\.crypto/pull/684)\)\. -* acme\_\* modules \- increase number of retries from 5 to 10 to increase stability with unstable ACME endpoints \([https\://github\.com/ansible\-collections/community\.crypto/pull/685](https\://github\.com/ansible\-collections/community\.crypto/pull/685)\)\. -* acme\_\* modules \- make account registration handling more flexible to accept 404 instead of 400 send by DigiCert\'s ACME endpoint when an account does not exist \([https\://github\.com/ansible\-collections/community\.crypto/pull/681](https\://github\.com/ansible\-collections/community\.crypto/pull/681)\)\. -* openssl\_dhparam \- was using an internal function instead of the public API to load DH param files when using the cryptography backend\. The internal function was removed in cryptography 42\.0\.0\. The module now uses the public API\, which has been available since support for DH params was added to cryptography \([https\://github\.com/ansible\-collections/community\.crypto/pull/698](https\://github\.com/ansible\-collections/community\.crypto/pull/698)\)\. -* openssl\_privatekey\_info \- check\_consistency\=true no longer works for RSA keys with cryptography 42\.0\.0\+ \([https\://github\.com/ansible\-collections/community\.crypto/pull/701](https\://github\.com/ansible\-collections/community\.crypto/pull/701)\)\. -* openssl\_privatekey\_info \- check\_consistency\=true now reports a warning if it cannot determine consistency \([https\://github\.com/ansible\-collections/community\.crypto/pull/705](https\://github\.com/ansible\-collections/community\.crypto/pull/705)\)\. - - -#### community\.digitalocean - -* The C\(project\_name\) parameter for many modules was used by alias C\(project\) internally in the codebase\, but to work properly C\(project\_name\) must be used in the code\. Replace self\.module\.params\.get\(\"project\"\) with self\.module\.params\.get\(\"project\_name\"\) \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/326](https\://github\.com/ansible\-collections/community\.digitalocean/issues/326)\)\. -* digital\_ocean\_kubernetes \- module didn\'t return kubeconfig properly\, return documentation was invalid\. Fixed version returns data with the same structure all the time\, also it is aligned with M\(community\.digitalocean\.digital\_ocean\_kubernetes\_info\) documentation return data now\. \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/322](https\://github\.com/ansible\-collections/community\.digitalocean/issues/322)\)\. -* inventory plugin \- restore reading auth token from env variables \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/315](https\://github\.com/ansible\-collections/community\.digitalocean/pull/315)\)\. - - -#### community\.dns - -* Update Public Suffix List\. -* wait\_for\_txt\, nameserver\_info\, nameserver\_record\_info \- when looking up nameservers for a domain\, do not treat NXDOMAIN as a fatal error \([https\://github\.com/ansible\-collections/community\.dns/pull/177](https\://github\.com/ansible\-collections/community\.dns/pull/177)\)\. - - -#### community\.docker - -* Use unix\:///var/run/docker\.sock instead of the legacy unix\://var/run/docker\.sock as default for docker\_host \([https\://github\.com/ansible\-collections/community\.docker/pull/736](https\://github\.com/ansible\-collections/community\.docker/pull/736)\)\. -* docker\_compose\_v2 \- properly parse dry\-run build events from stderr \([https\://github\.com/ansible\-collections/community\.docker/issues/778](https\://github\.com/ansible\-collections/community\.docker/issues/778)\, [https\://github\.com/ansible\-collections/community\.docker/pull/779](https\://github\.com/ansible\-collections/community\.docker/pull/779)\)\. -* docker\_compose\_v2\_pull \- the module was documented as part of the community\.docker\.docker action group\, but was not actually part of it\. That has now been fixed \([https\://github\.com/ansible\-collections/community\.docker/pull/773](https\://github\.com/ansible\-collections/community\.docker/pull/773)\)\. -* docker\_image \- fix archiving idempotency with Docker API 1\.44 or later \([https\://github\.com/ansible\-collections/community\.docker/pull/765](https\://github\.com/ansible\-collections/community\.docker/pull/765)\)\. -* modules and plugins using the Docker SDK for Python \- remove ssl\_version from the parameters passed to Docker SDK for Python 7\.0\.0\+\. Explicitly fail with a nicer error message if it was explicitly set in this case \([https\://github\.com/ansible\-collections/community\.docker/pull/715](https\://github\.com/ansible\-collections/community\.docker/pull/715)\)\. -* modules and plugins using the Docker SDK for Python \- remove tls\_hostname from the parameters passed to Docker SDK for Python 7\.0\.0\+\. Explicitly fail with a nicer error message if it was explicitly set in this case \([https\://github\.com/ansible\-collections/community\.docker/pull/721](https\://github\.com/ansible\-collections/community\.docker/pull/721)\)\. -* vendored Docker SDK for Python \- avoid passing on ssl\_version and tls\_hostname if they were not provided by the user\. Remove dead code\. \([https\://github\.com/ansible\-collections/community\.docker/pull/722](https\://github\.com/ansible\-collections/community\.docker/pull/722)\)\. - - -#### community\.general - -* homebrew \- detect already installed formulae and casks using JSON output from brew info \([https\://github\.com/ansible\-collections/community\.general/issues/864](https\://github\.com/ansible\-collections/community\.general/issues/864)\)\. -* incus connection plugin \- treats inventory\_hostname as a variable instead of a literal in remote connections \([https\://github\.com/ansible\-collections/community\.general/issues/7874](https\://github\.com/ansible\-collections/community\.general/issues/7874)\)\. -* ipa\_otptoken \- the module expect ipatokendisabled as string but the ipatokendisabled value is returned as a boolean \([https\://github\.com/ansible\-collections/community\.general/pull/7795](https\://github\.com/ansible\-collections/community\.general/pull/7795)\)\. -* keycloak\_identity\_provider \- mappers processing was not idempotent if the mappers configuration list had not been sorted by name \(in ascending order\)\. Fix resolves the issue by sorting mappers in the desired state using the same key which is used for obtaining existing state \([https\://github\.com/ansible\-collections/community\.general/pull/7418](https\://github\.com/ansible\-collections/community\.general/pull/7418)\)\. -* keycloak\_identity\_provider \- it was not possible to reconfigure \(add\, remove\) mappers once they were created initially\. Removal was ignored\, adding new ones resulted in dropping the pre\-existing unmodified mappers\. Fix resolves the issue by supplying correct input to the internal update call \([https\://github\.com/ansible\-collections/community\.general/pull/7418](https\://github\.com/ansible\-collections/community\.general/pull/7418)\)\. -* keycloak\_user \- when force is set\, but user does not exist\, do not try to delete it \([https\://github\.com/ansible\-collections/community\.general/pull/7696](https\://github\.com/ansible\-collections/community\.general/pull/7696)\)\. -* ldap \- previously the order number \(if present\) was expected to follow an equals sign in the DN\. This makes it so the order number string is identified correctly anywhere within the DN \([https\://github\.com/ansible\-collections/community\.general/issues/7646](https\://github\.com/ansible\-collections/community\.general/issues/7646)\)\. -* mssql\_script \- make the module work with Python 2 \([https\://github\.com/ansible\-collections/community\.general/issues/7818](https\://github\.com/ansible\-collections/community\.general/issues/7818)\, [https\://github\.com/ansible\-collections/community\.general/pull/7821](https\://github\.com/ansible\-collections/community\.general/pull/7821)\)\. -* nmcli \- fix connection\.slave\-type wired to bond and not with parameter slave\_type in case of connection type wifi \([https\://github\.com/ansible\-collections/community\.general/issues/7389](https\://github\.com/ansible\-collections/community\.general/issues/7389)\)\. -* proxmox \- fix updating a container config if the setting does not already exist \([https\://github\.com/ansible\-collections/community\.general/pull/7872](https\://github\.com/ansible\-collections/community\.general/pull/7872)\)\. -* proxmox\_kvm \- running state\=template will first check whether VM is already a template \([https\://github\.com/ansible\-collections/community\.general/pull/7792](https\://github\.com/ansible\-collections/community\.general/pull/7792)\)\. -* statusio\_maintenance \- fix error caused by incorrectly formed API data payload\. Was raising \"Failed to create maintenance HTTP Error 400 Bad Request\" caused by bad data type for date/time and deprecated dict keys \([https\://github\.com/ansible\-collections/community\.general/pull/7754](https\://github\.com/ansible\-collections/community\.general/pull/7754)\)\. - - -#### community\.grafana - -* Add grafana\_organiazion\_user to action\_groups\.grafana -* Fixed orgId handling in diff comparison for grafana\_datasource if using org\_name - - -#### community\.postgresql - -* postgresql\_query \- now reports not changed for queries starting with \"SHOW\" \([https\://github\.com/ansible\-collections/community\.postgresql/pull/592](https\://github\.com/ansible\-collections/community\.postgresql/pull/592)\)\. -* postgresql\_user \- module failed when running against an SQL\_ASCII encoded database as the user\'s current password was returned as bytes as opposed to a str\. Fix now checks for this case and decodes the bytes as an ascii encoded string\. \([https\://github\.com/ansible\-collections/community\.postgresql/issues/584](https\://github\.com/ansible\-collections/community\.postgresql/issues/584)\)\. - - -#### community\.sap\_libs - -* fixes failures in sanity test for all modules - - -#### community\.vmware - -* Fix InsecureRequestWarning for modules based on the VmwareRestClient module util when setting validate\_certs to False \([https\://github\.com/ansible\-collections/community\.vmware/pull/1969](https\://github\.com/ansible\-collections/community\.vmware/pull/1969)\)\. -* module\_utils/vmware\.py \- remove ssl\.wrap\_socet\(\) function\. Replaced for code based on ssl\.get\_server\_certificate \([https\://github\.com/ansible\-collections/community\.vmware/issues/1930](https\://github\.com/ansible\-collections/community\.vmware/issues/1930)\)\. -* vmware\_guest \- Fix failure of vm reconfiguration with enabled virt\_based\_security \([https\://github\.com/ansible\-collections/community\.vmware/pull/1848](https\://github\.com/ansible\-collections/community\.vmware/pull/1848)\)\. - - -#### community\.zabbix - -* Avoid to update user\-directory configuration in dry run\. -* api module \- Fixed certificiate errors -* proxy and server roles \- Defaulted location of fping and fping6 based on OS\. -* proxy role \- Removed requirement for mysql group definition\. -* server role \- typo in configuration var StasAllowedIP to StatsAllowedIP -* zabbix\-\{agent\, javagateway\, proxy\, server\, web\} \- support raspberry pi without repository url specification - - -#### dellemc\.enterprise\_sonic - -* requirements \- Update requires\_ansible version in meta/runtime\.yml to the oldest supported version \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/321](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/321)\)\. -* sonic\_bgp\_communities \- Fix incorrect \"facts\" handling for parsing of a BGP community list configured with an empty \"members\" list \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/319](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/319)\)\. -* sonic\_bgp\_neighbors \- Fix prefix\-limit issue \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/289](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/289)\)\. -* sonic\_interfaces \- Add warnings when speed and auto\_negotiate is configured at same time \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. -* sonic\_interfaces \- Fix support for standard naming interfaces \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. -* sonic\_interfaces \- Prevent configuring speed in port group interfaces \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/314)\)\. -* sonic\_stp \- Correct the commands list for STP delete state \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/302](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/302)\)\. - - -#### dellemc\.openmanage - -* Fixed the issue for ignoring the environment variable NO\_PROXY earlier\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/554](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/554)\) -* For idrac\_certificates module\, the email\_address has been made as an optional parameter\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/582](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/582)\)\. -* Issue is fixed for deploying a new configuration on quick deploy slot when IPv6 is disabled\.\([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/533](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/533)\) - - -#### fortinet\.fortimanager - -* Added missing enum values for some arguments\. -* Change minimum required ansible\-core version to 2\.14\.0 -* Fixed a bug where ansible may skip update incorrectly\. -* Support FortiManager 7\.0\.10 - - -#### infoblox\.nios\_modules - -* Fixes environment variable max\_results using INFOBLOX\_MAX\_RESULTS [\#209](https\://github\.com/infobloxopen/infoblox\-ansible/pull/209) -* Fixes index error for transform fields in DTC LBDN \(auth\_zone and Pool\) and DTC POOL \(servers and monitors\) [\#209](https\://github\.com/infobloxopen/infoblox\-ansible/pull/209) -* Fixes typo for environment variable INFOBLOX\_WAPI\_VERSION [\#209](https\://github\.com/infobloxopen/infoblox\-ansible/pull/209) - - -#### netapp\.ontap - -* na\_ontap\_nfs \- fix error with windows in REST for ONTAP 9\.10 or earlier\. -* na\_ontap\_security\_certificates \- fix error with ontap\_info returned in module output in REST\. -* na\_ontap\_snapshot\_policy \- fix issue with modifying snapshot policy in REST\. -* na\_ontap\_volume \- modified type to be case insensitive in REST\. - - -#### netbox\.netbox - -* Improve error reporting for missing module \[\#1126\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1126](https\://github\.com/netbox\-community/ansible\_modules/pull/1126)\) -* nb\_inventory \- Fix API cache failure \[\#1111\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1111](https\://github\.com/netbox\-community/ansible\_modules/pull/1111)\) -* nb\_lookup \- Allow multiple IDs in nb\_lookup \[\#1042\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1042](https\://github\.com/netbox\-community/ansible\_modules/pull/1042)\) - - -#### purestorage\.flasharray - -* purefa\_ds \- Fix issue with SDK returning empty data for data directory services even when it does exist -* purefa\_policy \- Fix incorrect call of psot instead of patch for NFS policies - - -#### purestorage\.flashblade - -* purefb\_info \- Added missing object lock retention details if enabledd - - -#### vultr\.cloud - -* Fixed an error while waiting for a specific state and the API returns an empty response\. \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/108](https\://github\.com/vultr/ansible\-collection\-vultr/issues/108)\)\. -* Fixed an issue with waiting for state \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/102](https\://github\.com/vultr/ansible\-collection\-vultr/pull/102)\)\. -* instance\_info \- Fixed the alias name being was used on the wrong argument\. \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/105](https\://github\.com/vultr/ansible\-collection\-vultr/issues/105)\)\. -* reserved\_ip \- Fixed an issue which caused the module to fail\, also enabled integration tests \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/92](https\://github\.com/vultr/ansible\-collection\-vultr/issues/92)\)\. - - -### Known Issues - - -#### dellemc\.openmanage - -* idrac\_firmware \- Issue\(279282\) \- This module does not support firmware update using HTTP\, HTTPS\, and FTP shares with authentication on iDRAC8\. -* idrac\_network\_attributes \- Issue\(279049\) \- If unsupported values are provided for the parameter ome\_network\_attributes\, then this module does not provide a correct error message\. -* ome\_device\_network\_services \- Issue\(212681\) \- The module does not provide a proper error message if unsupported values are provided for the following parameters\- port\_number\, community\_name\, max\_sessions\, max\_auth\_retries\, and idle\_timeout\. -* ome\_device\_power\_settings \- Issue\(212679\) \- The module displays the following message if the value provided for the parameter power\_cap is not within the supported range of 0 to 32767\, Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\. -* ome\_device\_quick\_deploy \- Issue\(275231\) \- This module does not deploy a new configuration to a slot that has disabled IPv6\. -* ome\_diagnostics \- Issue\(279193\) \- Export of SupportAssist collection logs to the share location fails on OME version 4\.0\.0\. -* ome\_smart\_fabric\_uplink \- Issue\(186024\) \- The module supported by OpenManage Enterprise Modular\, however it does not allow the creation of multiple uplinks of the same name\. If an uplink is created using the same name as an existing uplink\, then the existing uplink is modified\. - - -### New Plugins - - -#### Connection - -* community\.general\.incus \- Run tasks in Incus instances via the Incus CLI\. - - -#### Filter - -* community\.general\.from\_ini \- Converts INI text input into a dictionary -* community\.general\.to\_ini \- Converts a dictionary to the INI file format - - -#### Lookup - -* community\.general\.github\_app\_access\_token \- Obtain short\-lived Github App Access tokens - - -### New Modules - - -#### check\_point\.mgmt - -* check\_point\.mgmt\.cp\_mgmt\_add\_central\_license \- Add central license\. -* check\_point\.mgmt\.cp\_mgmt\_central\_license\_facts \- Get central\-license objects facts on Checkpoint over Web Services API\. -* check\_point\.mgmt\.cp\_mgmt\_delete\_central\_license \- Delete central license\. -* check\_point\.mgmt\.cp\_mgmt\_distribute\_cloud\_licenses \- Distribute licenses to target CloudGuard gateways\. -* check\_point\.mgmt\.cp\_mgmt\_show\_cloud\_licenses\_usage \- Show attached licenses usage\. -* check\_point\.mgmt\.cp\_mgmt\_show\_ha\_status \- Retrieve domain high availability status\. - - -#### community\.digitalocean - -* community\.digitalocean\.digital\_ocean\_project\_resource\_info \- Gather information about DigitalOcean Project Resources - - -#### community\.docker - -* community\.docker\.docker\_compose\_v2 \- Manage multi\-container Docker applications with Docker Compose CLI plugin -* community\.docker\.docker\_compose\_v2\_pull \- Pull a Docker compose project -* community\.docker\.docker\_image\_build \- Build Docker images using Docker buildx -* community\.docker\.docker\_image\_export \- Export \(archive\) Docker images -* community\.docker\.docker\_image\_pull \- Pull Docker images from registries -* community\.docker\.docker\_image\_push \- Push Docker images to registries -* community\.docker\.docker\_image\_remove \- Remove Docker images -* community\.docker\.docker\_image\_tag \- Tag Docker images with new names and/or tags - - -#### community\.general - -* community\.general\.consul\_acl\_bootstrap \- Bootstrap ACLs in Consul -* community\.general\.consul\_auth\_method \- Manipulate Consul auth methods -* community\.general\.consul\_binding\_rule \- Manipulate Consul binding rules -* community\.general\.consul\_token \- Manipulate Consul tokens -* community\.general\.dnf\_config\_manager \- Enable or disable dnf repositories using config\-manager -* community\.general\.gitlab\_label \- Creates/updates/deletes GitLab Labels belonging to project or group\. -* community\.general\.gitlab\_milestone \- Creates/updates/deletes GitLab Milestones belonging to project or group -* community\.general\.keycloak\_component\_info \- Retrive component info in Keycloak -* community\.general\.keycloak\_realm\_rolemapping \- Allows administration of Keycloak realm role mappings into groups with the Keycloak API -* community\.general\.proxmox\_node\_info \- Retrieve information about one or more Proxmox VE nodes -* community\.general\.proxmox\_storage\_contents\_info \- List content from a Proxmox VE storage - - -#### dellemc\.enterprise\_sonic - -* dellemc\.enterprise\_sonic\.sonic\_dhcp\_snooping \- Manage DHCP Snooping on SONiC -* dellemc\.enterprise\_sonic\.sonic\_pki \- Manages PKI attributes of Enterprise Sonic -* dellemc\.enterprise\_sonic\.sonic\_stp \- Manage STP configuration on SONiC - - -#### dellemc\.openmanage - -* dellemc\.openmanage\.idrac\_license \- This module allows to import\, export\, and delete licenses on iDRAC\. - - -#### infoblox\.nios\_modules - -* infoblox\.nios\_modules\.nios\_dtc\_monitor\_http \- Configures the Infoblox NIOS DTC HTTP monitor\. -* infoblox\.nios\_modules\.nios\_dtc\_monitor\_icmp \- Configures the Infoblox NIOS DTC ICMP monitor -* infoblox\.nios\_modules\.nios\_dtc\_monitor\_pdp \- Configures the Infoblox NIOS DTC PDP monitor -* infoblox\.nios\_modules\.nios\_dtc\_monitor\_sip \- Configures the Infoblox NIOS DTC SIP monitor -* infoblox\.nios\_modules\.nios\_dtc\_monitor\_snmp \- Configures the Infoblox NIOS DTC SNMP monitor -* infoblox\.nios\_modules\.nios\_dtc\_monitor\_tcp \- Configures the Infoblox NIOS DTC TCP monitor -* infoblox\.nios\_modules\.nios\_dtc\_topology \- Configures the Infoblox NIOS DTC Topology - - -#### netapp\.ontap - -* netapp\.ontap\.na\_ontap\_cifs\_unix\_symlink\_mapping \- NetApp ONTAP module to manage UNIX symbolic link mapping for CIFS clients\. -* netapp\.ontap\.na\_ontap\_cli\_timeout \- NetApp ONTAP module to set the CLI inactivity timeout value\. -* netapp\.ontap\.na\_ontap\_snmp\_config \- NetApp ONTAP module to modify SNMP configuration\. - - -#### purestorage\.flashblade - -* purestorage\.flashblade\.purefb\_hardware \- Manage FlashBlade Hardware - - -#### vultr\.cloud - -* vultr\.cloud\.object\_storage \- Manages object storages on Vultr - - -### Unchanged Collections - -* ansible\.netcommon \(still version 5\.3\.0\) -* ansible\.posix \(still version 1\.5\.4\) -* ansible\.utils \(still version 2\.12\.0\) -* ansible\.windows \(still version 2\.2\.0\) -* arista\.eos \(still version 6\.2\.2\) -* azure\.azcollection \(still version 1\.19\.0\) -* chocolatey\.chocolatey \(still version 1\.5\.1\) -* cisco\.aci \(still version 2\.8\.0\) -* cisco\.asa \(still version 4\.0\.3\) -* cisco\.ios \(still version 5\.3\.0\) -* cisco\.iosxr \(still version 6\.1\.1\) -* cisco\.mso \(still version 2\.5\.0\) -* cisco\.nxos \(still version 5\.3\.0\) -* cisco\.ucs \(still version 1\.10\.0\) -* cloud\.common \(still version 2\.1\.4\) -* cloudscale\_ch\.cloud \(still version 2\.3\.1\) -* community\.azure \(still version 2\.0\.0\) -* community\.ciscosmb \(still version 1\.0\.7\) -* community\.libvirt \(still version 1\.3\.0\) -* community\.mongodb \(still version 1\.6\.3\) -* community\.mysql \(still version 3\.8\.0\) -* community\.network \(still version 5\.0\.2\) -* community\.okd \(still version 2\.3\.0\) -* community\.proxysql \(still version 1\.5\.1\) -* community\.rabbitmq \(still version 1\.2\.3\) -* community\.sap \(still version 2\.0\.0\) -* community\.sops \(still version 1\.6\.7\) -* community\.windows \(still version 2\.1\.0\) -* containers\.podman \(still version 1\.11\.0\) -* cyberark\.conjur \(still version 1\.2\.2\) -* dellemc\.powerflex \(still version 2\.1\.0\) -* dellemc\.unity \(still version 1\.7\.1\) -* f5networks\.f5\_modules \(still version 1\.27\.1\) -* fortinet\.fortios \(still version 2\.3\.4\) -* frr\.frr \(still version 2\.0\.2\) -* gluster\.gluster \(still version 1\.0\.2\) -* google\.cloud \(still version 1\.3\.0\) -* hetzner\.hcloud \(still version 2\.4\.1\) -* hpe\.nimble \(still version 1\.1\.4\) -* ibm\.qradar \(still version 2\.1\.0\) -* ibm\.spectrum\_virtualize \(still version 2\.0\.0\) -* infinidat\.infinibox \(still version 1\.3\.12\) -* inspur\.ispim \(still version 2\.2\.0\) -* inspur\.sm \(still version 2\.3\.0\) -* junipernetworks\.junos \(still version 5\.3\.1\) -* kubernetes\.core \(still version 2\.4\.0\) -* lowlydba\.sqlserver \(still version 2\.2\.2\) -* microsoft\.ad \(still version 1\.4\.1\) -* netapp\.aws \(still version 21\.7\.1\) -* netapp\.azure \(still version 21\.10\.1\) -* netapp\.cloudmanager \(still version 21\.22\.1\) -* netapp\.elementsw \(still version 21\.7\.0\) -* netapp\.storagegrid \(still version 21\.11\.1\) -* netapp\.um\_info \(still version 21\.8\.1\) -* netapp\_eseries\.santricity \(still version 1\.4\.0\) -* ngine\_io\.cloudstack \(still version 2\.3\.0\) -* ngine\_io\.exoscale \(still version 1\.1\.0\) -* openstack\.cloud \(still version 2\.2\.0\) -* openvswitch\.openvswitch \(still version 2\.1\.1\) -* ovirt\.ovirt \(still version 3\.2\.0\) -* purestorage\.fusion \(still version 1\.6\.0\) -* sensu\.sensu\_go \(still version 1\.14\.0\) -* splunk\.es \(still version 2\.1\.2\) -* t\_systems\_mms\.icinga\_director \(still version 2\.0\.1\) -* telekom\_mms\.icinga\_director \(still version 1\.35\.0\) -* theforeman\.foreman \(still version 3\.15\.0\) -* vmware\.vmware\_rest \(still version 2\.3\.1\) -* vyos\.vyos \(still version 4\.1\.0\) -* wti\.remote \(still version 1\.0\.5\) - - -## v9\.1\.0 - -- Release Summary -- Ansible\-core -- Changed Collections -- Minor Changes - - ansible\.utils - - ansible\.windows - - cisco\.ios - - cisco\.ise - - cisco\.nxos - - community\.general - - community\.routeros - - community\.windows - - community\.zabbix - - dellemc\.openmanage - - dellemc\.powerflex - - f5networks\.f5\_modules - - google\.cloud - - hetzner\.hcloud - - inspur\.ispim - - microsoft\.ad - - purestorage\.flasharray - - telekom\_mms\.icinga\_director - - theforeman\.foreman -- Breaking Changes / Porting Guide - - Ansible\-core -- Security Fixes - - Ansible\-core -- Bugfixes - - Ansible\-core - - ansible\.windows - - arista\.eos - - cisco\.ios - - cisco\.iosxr - - cisco\.ise - - cisco\.meraki - - community\.crypto - - community\.dns - - community\.general - - community\.vmware - - community\.windows - - community\.zabbix - - dellemc\.openmanage - - hetzner\.hcloud - - junipernetworks\.junos - - microsoft\.ad - - netapp\.ontap - - purestorage\.flasharray - - splunk\.es - - theforeman\.foreman - - vultr\.cloud -- Known Issues - - dellemc\.openmanage -- New Plugins - - Filter - - Lookup - - Test -- New Modules - - cisco\.ios - - community\.general - - purestorage\.flasharray -- Unchanged Collections - - -### Release Summary - -Release Date\: 2023\-12\-05 - -[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) - - -### Ansible\-core - -Ansible 9\.1\.0 contains ansible\-core version 2\.16\.1\. -This is a newer version than version 2\.16\.0 contained in the previous Ansible release\. - -The changes are reported in the combined changelog below\. - - -### Changed Collections - -If not mentioned explicitly\, the changes are reported in the combined changelog below\. - -| Collection | Ansible 9.0.1 | Ansible 9.1.0 | Notes | -| --------------------------- | ------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| ansible.utils | 2.11.0 | 2.12.0 | | -| ansible.windows | 2.1.0 | 2.2.0 | | -| arista.eos | 6.2.1 | 6.2.2 | | -| awx.awx | 23.3.1 | 23.5.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| cisco.dnac | 6.7.6 | 6.8.1 | The collection did not have a changelog in this version. | -| cisco.ios | 5.2.0 | 5.3.0 | | -| cisco.iosxr | 6.1.0 | 6.1.1 | | -| cisco.ise | 2.5.16 | 2.6.2 | | -| cisco.meraki | 2.16.14 | 2.16.16 | | -| cisco.nxos | 5.2.1 | 5.3.0 | | -| community.crypto | 2.16.0 | 2.16.1 | | -| community.dns | 2.6.3 | 2.6.4 | | -| community.general | 8.0.2 | 8.1.0 | | -| community.routeros | 2.10.0 | 2.11.0 | | -| community.vmware | 4.0.0 | 4.0.1 | | -| community.windows | 2.0.0 | 2.1.0 | | -| community.zabbix | 2.1.0 | 2.2.0 | | -| dellemc.openmanage | 8.4.0 | 8.5.0 | | -| dellemc.powerflex | 2.0.1 | 2.1.0 | | -| f5networks.f5_modules | 1.27.0 | 1.27.1 | | -| google.cloud | 1.2.0 | 1.3.0 | | -| hetzner.hcloud | 2.3.0 | 2.4.1 | | -| inspur.ispim | 2.1.0 | 2.2.0 | | -| junipernetworks.junos | 5.3.0 | 5.3.1 | | -| microsoft.ad | 1.3.0 | 1.4.1 | | -| netapp.ontap | 22.8.2 | 22.8.3 | | -| openstack.cloud | 2.1.0 | 2.2.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| purestorage.flasharray | 1.22.0 | 1.24.0 | | -| splunk.es | 2.1.0 | 2.1.2 | | -| telekom_mms.icinga_director | 1.34.1 | 1.35.0 | | -| theforeman.foreman | 3.14.0 | 3.15.0 | | -| vultr.cloud | 1.10.0 | 1.10.1 | | - - -### Minor Changes - - -#### ansible\.utils - -* Fact\_diff filter plugin \- Add fact\_diff filter plugin\. \([https\://github\.com/ansible\-collections/ansible\.utils/issues/78](https\://github\.com/ansible\-collections/ansible\.utils/issues/78)\)\. - - -#### ansible\.windows - -* Set minimum supported Ansible version to 2\.14 to align with the versions still supported by Ansible\. -* win\_share \- Added a new param called scope\_name that allows file shares to be scoped for Windows Server failover cluster roles\. - - -#### cisco\.ios - -* Added ios\_evpn\_evi resource module\. -* Added ios\_evpn\_global resource module\. -* Added ios\_vxlan\_vtep resource module\. -* Fixed ios\_evpn\_evi resource module integration test failure \- code to remove VLAN config\. -* ios\_bgp\_address\_family \- Fixed an issue with inherit peer\-policy CLI -* ios\_bgp\_address\_family \- added \'advertise\' key -* ios\_vlans \- added vlan config CLI feature\. -* ios\_vrf \- added MDT related keys - - -#### cisco\.ise - -* Services included configuration\, edda\, dataconnect\_services\, subscriber\. - - -#### cisco\.nxos - -* nxos\_config \- Relax restrictions on I\(src\) parameter so it can be used more like I\(lines\)\. \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/89](https\://github\.com/ansible\-collections/cisco\.nxos/issues/89)\)\. - - -#### community\.general - -* bitwarden lookup plugin \- when looking for items using an item ID\, the item is now accessed directly with bw get item instead of searching through all items\. This doubles the lookup speed \([https\://github\.com/ansible\-collections/community\.general/pull/7468](https\://github\.com/ansible\-collections/community\.general/pull/7468)\)\. -* elastic callback plugin \- close elastic client to not leak resources \([https\://github\.com/ansible\-collections/community\.general/pull/7517](https\://github\.com/ansible\-collections/community\.general/pull/7517)\)\. -* git\_config \- allow multiple git configs for the same name with the new add\_mode option \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\. -* git\_config \- the after and before fields in the diff of the return value can be a list instead of a string in case more configs with the same key are affected \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\. -* git\_config \- when a value is unset\, all configs with the same key are unset \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\. -* gitlab modules \- add ca\_path option \([https\://github\.com/ansible\-collections/community\.general/pull/7472](https\://github\.com/ansible\-collections/community\.general/pull/7472)\)\. -* gitlab modules \- remove duplicate gitlab package check \([https\://github\.com/ansible\-collections/community\.general/pull/7486](https\://github\.com/ansible\-collections/community\.general/pull/7486)\)\. -* gitlab\_runner \- add support for new runner creation workflow \([https\://github\.com/ansible\-collections/community\.general/pull/7199](https\://github\.com/ansible\-collections/community\.general/pull/7199)\)\. -* ipa\_config \- adds passkey choice to ipauserauthtype parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7588](https\://github\.com/ansible\-collections/community\.general/pull/7588)\)\. -* ipa\_sudorule \- adds options to include denied commands or command groups \([https\://github\.com/ansible\-collections/community\.general/pull/7415](https\://github\.com/ansible\-collections/community\.general/pull/7415)\)\. -* ipa\_user \- adds idp and passkey choice to ipauserauthtype parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7589](https\://github\.com/ansible\-collections/community\.general/pull/7589)\)\. -* irc \- add validate\_certs option\, and rename use\_ssl to use\_tls\, while keeping use\_ssl as an alias\. The default value for validate\_certs is false for backwards compatibility\. We recommend to every user of this module to explicitly set use\_tls\=true and validate\_certs\=true\` whenever possible\, especially when communicating to IRC servers over the internet \([https\://github\.com/ansible\-collections/community\.general/pull/7550](https\://github\.com/ansible\-collections/community\.general/pull/7550)\)\. -* keycloak module utils \- expose error message from Keycloak server for HTTP errors in some specific situations \([https\://github\.com/ansible\-collections/community\.general/pull/7645](https\://github\.com/ansible\-collections/community\.general/pull/7645)\)\. -* keycloak\_user\_federation \- add option for krbPrincipalAttribute \([https\://github\.com/ansible\-collections/community\.general/pull/7538](https\://github\.com/ansible\-collections/community\.general/pull/7538)\)\. -* lvol \- change pvs argument type to list of strings \([https\://github\.com/ansible\-collections/community\.general/pull/7676](https\://github\.com/ansible\-collections/community\.general/pull/7676)\, [https\://github\.com/ansible\-collections/community\.general/issues/7504](https\://github\.com/ansible\-collections/community\.general/issues/7504)\)\. -* lxd connection plugin \- tighten the detection logic for lxd Instance not found errors\, to avoid false detection on unrelated errors such as /usr/bin/python3\: not found \([https\://github\.com/ansible\-collections/community\.general/pull/7521](https\://github\.com/ansible\-collections/community\.general/pull/7521)\)\. -* netcup\_dns \- adds support for record types OPENPGPKEY\, SMIMEA\, and SSHFP \([https\://github\.com/ansible\-collections/community\.general/pull/7489](https\://github\.com/ansible\-collections/community\.general/pull/7489)\)\. -* nmcli \- add support for new connection type loopback \([https\://github\.com/ansible\-collections/community\.general/issues/6572](https\://github\.com/ansible\-collections/community\.general/issues/6572)\)\. -* nmcli \- allow for infiniband slaves of bond interface types \([https\://github\.com/ansible\-collections/community\.general/pull/7569](https\://github\.com/ansible\-collections/community\.general/pull/7569)\)\. -* nmcli \- allow for the setting of MTU for infiniband and bond interface types \([https\://github\.com/ansible\-collections/community\.general/pull/7499](https\://github\.com/ansible\-collections/community\.general/pull/7499)\)\. -* onepassword lookup plugin \- support 1Password Connect with the opv2 client by setting the connect\_host and connect\_token parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7116](https\://github\.com/ansible\-collections/community\.general/pull/7116)\)\. -* onepassword\_raw lookup plugin \- support 1Password Connect with the opv2 client by setting the connect\_host and connect\_token parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7116](https\://github\.com/ansible\-collections/community\.general/pull/7116)\) -* passwordstore \- adds timestamp and preserve parameters to modify the stored password format \([https\://github\.com/ansible\-collections/community\.general/pull/7426](https\://github\.com/ansible\-collections/community\.general/pull/7426)\)\. -* proxmox \- adds template value to the state parameter\, allowing conversion of container to a template \([https\://github\.com/ansible\-collections/community\.general/pull/7143](https\://github\.com/ansible\-collections/community\.general/pull/7143)\)\. -* proxmox \- adds update parameter\, allowing update of an already existing containers configuration \([https\://github\.com/ansible\-collections/community\.general/pull/7540](https\://github\.com/ansible\-collections/community\.general/pull/7540)\)\. -* proxmox inventory plugin \- adds an option to exclude nodes from the dynamic inventory generation\. The new setting is optional\, not using this option will behave as usual \([https\://github\.com/ansible\-collections/community\.general/issues/6714](https\://github\.com/ansible\-collections/community\.general/issues/6714)\, [https\://github\.com/ansible\-collections/community\.general/pull/7461](https\://github\.com/ansible\-collections/community\.general/pull/7461)\)\. -* proxmox\_disk \- add ability to manipulate CD\-ROM drive \([https\://github\.com/ansible\-collections/community\.general/pull/7495](https\://github\.com/ansible\-collections/community\.general/pull/7495)\)\. -* proxmox\_kvm \- adds template value to the state parameter\, allowing conversion of a VM to a template \([https\://github\.com/ansible\-collections/community\.general/pull/7143](https\://github\.com/ansible\-collections/community\.general/pull/7143)\)\. -* proxmox\_kvm \- support the hookscript parameter \([https\://github\.com/ansible\-collections/community\.general/issues/7600](https\://github\.com/ansible\-collections/community\.general/issues/7600)\)\. -* proxmox\_ostype \- it is now possible to specify the ostype when creating an LXC container \([https\://github\.com/ansible\-collections/community\.general/pull/7462](https\://github\.com/ansible\-collections/community\.general/pull/7462)\)\. -* proxmox\_vm\_info \- add ability to retrieve configuration info \([https\://github\.com/ansible\-collections/community\.general/pull/7485](https\://github\.com/ansible\-collections/community\.general/pull/7485)\)\. -* redfish\_info \- adding the BootProgress property when getting Systems info \([https\://github\.com/ansible\-collections/community\.general/pull/7626](https\://github\.com/ansible\-collections/community\.general/pull/7626)\)\. -* ssh\_config \- adds controlmaster\, controlpath and controlpersist parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7456](https\://github\.com/ansible\-collections/community\.general/pull/7456)\)\. - - -#### community\.routeros - -* api\_info\, api\_modify \- add missing DoH parameters doh\-max\-concurrent\-queries\, doh\-max\-server\-connections\, and doh\-timeout to the ip dns path \([https\://github\.com/ansible\-collections/community\.routeros/issues/230](https\://github\.com/ansible\-collections/community\.routeros/issues/230)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/235](https\://github\.com/ansible\-collections/community\.routeros/pull/235)\) -* api\_info\, api\_modify \- add missing parameters address\-list\, address\-list\-timeout\, randomise\-ports\, and realm to subpaths of the ip firewall path \([https\://github\.com/ansible\-collections/community\.routeros/issues/236](https\://github\.com/ansible\-collections/community\.routeros/issues/236)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/237](https\://github\.com/ansible\-collections/community\.routeros/pull/237)\)\. -* api\_info\, api\_modify \- mark the interface wireless parameter running as read\-only \([https\://github\.com/ansible\-collections/community\.routeros/pull/233](https\://github\.com/ansible\-collections/community\.routeros/pull/233)\)\. -* api\_info\, api\_modify \- set the default value to false for the disabled parameter in some more paths where it can be seen in the documentation \([https\://github\.com/ansible\-collections/community\.routeros/pull/237](https\://github\.com/ansible\-collections/community\.routeros/pull/237)\)\. -* api\_modify \- add missing comment attribute to /routing id \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. -* api\_modify \- add missing attributes to the routing bgp connection path \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. -* api\_modify \- add versioning to the /tool e\-mail path \(RouterOS 7\.12 release\) \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. -* api\_modify \- make /ip traffic\-flow target a multiple value attribute \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\. - - -#### community\.windows - -* Set minimum supported Ansible version to 2\.14 to align with the versions still supported by Ansible\. - - -#### community\.zabbix - -* Added zabbix\_group\_events\_info module -* action module \- Added notify\_if\_canceled property -* agent and proxy roles \- Set default zabbix\_api\_server\_port to 80 or 443 based on zabbix\_api\_use\_ssl -* agent role \- Removed duplicative Windows agent task -* agent role \- Standardized default yum priority to 99 -* all roles \- Re\-added ability to override Debian repo source -* all roles \- Updated Debian repository format to 822 standard -* various \- updated testing modules -* various \- updated to fully qualified module names -* zabbix agent \- Added capability to add additional configuration includes -* zabbix\_api\_info module added -* zabbix\_user module \- add current\_passwd optional parameter to enable password updating of the currently logged in user \([https\://www\.zabbix\.com/documentation/6\.4/en/manual/api/reference/user/update](https\://www\.zabbix\.com/documentation/6\.4/en/manual/api/reference/user/update)\) - - -#### dellemc\.openmanage - -* Ansible lint issues are fixed for the collections\. -* Module redfish\_storage\_volume is enhanced to support reboot options and job tracking operation\. - - -#### dellemc\.powerflex - -* Added support for PowerFlex Denver version\(4\.5\.x\) to TB and Config role\. - - -#### f5networks\.f5\_modules - -* bigiq\_device\_discovery \- Changes in documentation related to Provider block - - -#### google\.cloud - -* anisble\-test \- integration tests are now run against 2\.14\.0 and 2\.15\.0 -* ansible \- 2\.14\.0 is now the minimum version supported -* ansible\-lint \- fixed over a thousand reported errors -* ansible\-lint \- upgraded to 6\.22 -* ansible\-test \- add support for GCP application default credentials \([https\://github\.com/ansible\-collections/google\.cloud/issues/359](https\://github\.com/ansible\-collections/google\.cloud/issues/359)\)\. -* gcp\_serviceusage\_service \- added backoff when checking for operation completion\. -* gcp\_serviceusage\_service \- use alloyb API for the integration test as spanner conflicts with other tests -* gcp\_sql\_ssl\_cert \- made sha1\_fingerprint optional\, which enables resource creation -* gcp\_storage\_default\_object\_acl \- removed non\-existent fields\; the resource is not usable\. - - -#### hetzner\.hcloud - -* Add the hetzner\.hcloud\.all group to configure all the modules using module\_defaults\. -* Allow to set the api\_endpoint module argument using the HCLOUD\_ENDPOINT environment variable\. -* Removed the hcloud\_ prefix from all modules names\, e\.g\. hetzner\.hcloud\.hcloud\_firewall was renamed to hetzner\.hcloud\.firewall\. Old module names will continue working\. -* Renamed the endpoint module argument to api\_endpoint\, backward compatibility is maintained using an alias\. -* hcloud inventory \- Add the api\_endpoint option\. -* hcloud inventory \- Deprecate the api\_token\_env option\, suggest using a lookup plugin \(\{\{ lookup\(\'ansible\.builtin\.env\'\, \'YOUR\_ENV\_VAR\'\) \}\}\) or use the well\-known HCLOUD\_TOKEN environment variable name\. -* hcloud inventory \- Rename the token\_env option to api\_token\_env\, use aliases for backward compatibility\. -* hcloud inventory \- Rename the token option to api\_token\, use aliases for backward compatibility\. - - -#### inspur\.ispim - -* Modify edit\_smtp\_com and add description information\. - - -#### microsoft\.ad - -* Make name an optional parameter for the AD modules\. Either name or identity needs to be set with their respective behaviours\. If creating a new AD user and only identity is set\, that will be the value used for the name of the object\. -* Set minimum supported Ansible version to 2\.14 to align with the versions still supported by Ansible\. -* object\_info \- Add ActiveDirectory module import - - -#### purestorage\.flasharray - -* purefa\_dns \- Added facility to add a CA certifcate to management DNS and check peer\. -* purefa\_info \- Add NSID value for NVMe namespace in hosts response -* purefa\_info \- Subset pgroups now also provides a new dict called deleted\_pgroups -* purefa\_offload \- Remove nfs as an option when Purity//FA 6\.6\.0 or higher is detected -* purefa\_snap \- Add support for suffix on remote offload snapshots - - -#### telekom\_mms\.icinga\_director - -* Extended docs and examples for multiple assign\_filter conditions \([https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/227](https\://github\.com/telekom\-mms/ansible\-collection\-icinga\-director/pull/227)\) - - -#### theforeman\.foreman - -* content\_view\_publish role \- allow passing async and poll to the module \([https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676](https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676)\) -* convert2rhel role \- install convert2rhel from cdn\-public\.redhat\.com\, dropping the requirement of a custom CA cert - - -### Breaking Changes / Porting Guide - - -#### Ansible\-core - -* assert \- Nested templating may result in an inability for the conditional to be evaluated\. See the porting guide for more information\. - - -### Security Fixes - - -#### Ansible\-core - -* templating \- Address issues where internal templating can cause unsafe variables to lose their unsafe designation \(CVE\-2023\-5764\) - - -### Bugfixes - - -#### Ansible\-core - -* Fix issue where an include\_tasks handler in a role was not able to locate a file in tasks/ when tasks\_from was used as a role entry point and main\.yml was not present \([https\://github\.com/ansible/ansible/issues/82241](https\://github\.com/ansible/ansible/issues/82241)\) -* Plugin loader does not dedupe nor cache filter/test plugins by file basename\, but full path name\. -* Restoring the ability of filters/tests can have same file base name but different tests/filters defined inside\. -* ansible\-pull now will expand relative paths for the \-d\|\-\-directory option is now expanded before use\. -* ansible\-pull will now correctly handle become and connection password file options for ansible\-playbook\. -* flush\_handlers \- properly handle a handler failure in a nested block when force\_handlers is set \([http\://github\.com/ansible/ansible/issues/81532](http\://github\.com/ansible/ansible/issues/81532)\) -* module no\_log will no longer affect top level booleans\, for example no\_log\_module\_parameter\=\'a\' will no longer hide changed\=False as a \'no log value\' \(matches \'a\'\)\. -* role params now have higher precedence than host facts again\, matching documentation\, this had unintentionally changed in 2\.15\. -* wait\_for should not handle \'non mmapable files\' again\. - - -#### ansible\.windows - -* Process\.cs \- Fix up the ProcessCreationFlags\.CreateProtectedProcess typo in the enum name -* setup \- Fix up typo collection \-\> collect when a timeout occurred during a fact subset -* win\_acl \- Fix broken path in case of volume junction -* win\_service\_info \- Warn and not fail if ERROR\_FILE\_NOT\_FOUND when trying to query a service \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/556](https\://github\.com/ansible\-collections/ansible\.windows/issues/556) -* win\_updates \- Fix up typo for Download progress event messages \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/554](https\://github\.com/ansible\-collections/ansible\.windows/issues/554) - - -#### arista\.eos - -* correct the reference of string attribute \'reference\_bandwith\'\. - - -#### cisco\.ios - -* Updated the ios\_ping ping module to support size param\. -* ios\_acls \- make sequence optional for rendering of standard acls\. -* ios\_bgp\_global \- Explicitly add neighbor address to every parser\. -* ios\_bgp\_global \- remote\_as not mendatory for neighbors\. -* ios\_vrf \- added MDT related keys - - -#### cisco\.iosxr - -* Fix issue in gathered state of interfaces and l3\_interfaces RMs\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/452](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/452)\, [https\://github\.com/ansible\-collections/cisco\.iosxr/issues/451](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/451)\) - - -#### cisco\.ise - -* Added missing import re in endpoint module -* Updated to use ciscoisesdk v2\.1\.1 or newer fixing ciscoisesdk problem\. - - -#### cisco\.meraki - -* Adding network\_clients\_info and network\_client\_info\. -* Adding platform\_meraki\.rst to docs\. -* Adding product\_types for update request on networks\. -* Idempotency bugs fixed in devices\_switch\_ports\. -* Parameter\`organization\_id\` change to organizationId organizations\_claim\. -* Parameter\`organization\_id\` change to organizationId organizations\_clone\. -* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_claim\. -* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_onboarding\_cloud\_monitoring\_export\_events\. -* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_onboarding\_cloud\_monitoring\_prepare\. -* Parameter\`organization\_id\` change to organizationId organizations\_inventory\_release\. -* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_assign\_seats\. -* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_move\. -* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_move\_seats\. -* Parameter\`organization\_id\` change to organizationId organizations\_licenses\_renew\_seats\. -* Parameter\`organization\_id\` change to organizationId organizations\_licensing\_coterm\_licenses\_move\. -* Parameter\`organization\_id\` change to organizationId organizations\_networks\_combine\. -* Parameter\`organization\_id\` change to organizationId organizations\_switch\_devices\_clone\. -* Parameter\`organization\_id\` change to organizationId organizations\_users\. -* Removing logs in meraki\.py\. -* networks\_syslog\_servers is now just an Update action to API\. - - -#### community\.crypto - -* acme\_\* modules \- also retry requests in case of socket errors\, bad status lines\, and unknown connection errors\; improve error messages in these cases \([https\://github\.com/ansible\-collections/community\.crypto/issues/680](https\://github\.com/ansible\-collections/community\.crypto/issues/680)\)\. - - -#### community\.dns - -* Update Public Suffix List\. -* nameserver\_record\_info \- fix crash when more than one record is retrieved \([https\://github\.com/ansible\-collections/community\.dns/pull/172](https\://github\.com/ansible\-collections/community\.dns/pull/172)\)\. - - -#### community\.general - -* apt\-rpm \- the module did not upgrade packages if a newer version exists\. Now the package will be reinstalled if the candidate is newer than the installed version \([https\://github\.com/ansible\-collections/community\.general/issues/7414](https\://github\.com/ansible\-collections/community\.general/issues/7414)\)\. -* cloudflare\_dns \- fix Cloudflare lookup of SHFP records \([https\://github\.com/ansible\-collections/community\.general/issues/7652](https\://github\.com/ansible\-collections/community\.general/issues/7652)\)\. -* interface\_files \- also consider address\_family when changing option\=method \([https\://github\.com/ansible\-collections/community\.general/issues/7610](https\://github\.com/ansible\-collections/community\.general/issues/7610)\, [https\://github\.com/ansible\-collections/community\.general/pull/7612](https\://github\.com/ansible\-collections/community\.general/pull/7612)\)\. -* irc \- replace ssl\.wrap\_socket that was removed from Python 3\.12 with code for creating a proper SSL context \([https\://github\.com/ansible\-collections/community\.general/pull/7542](https\://github\.com/ansible\-collections/community\.general/pull/7542)\)\. -* keycloak\_\* \- fix Keycloak API client to quote / properly \([https\://github\.com/ansible\-collections/community\.general/pull/7641](https\://github\.com/ansible\-collections/community\.general/pull/7641)\)\. -* keycloak\_authz\_permission \- resource payload variable for scope\-based permission was constructed as a string\, when it needs to be a list\, even for a single item \([https\://github\.com/ansible\-collections/community\.general/issues/7151](https\://github\.com/ansible\-collections/community\.general/issues/7151)\)\. -* log\_entries callback plugin \- replace ssl\.wrap\_socket that was removed from Python 3\.12 with code for creating a proper SSL context \([https\://github\.com/ansible\-collections/community\.general/pull/7542](https\://github\.com/ansible\-collections/community\.general/pull/7542)\)\. -* lvol \- test for output messages in both stdout and stderr \([https\://github\.com/ansible\-collections/community\.general/pull/7601](https\://github\.com/ansible\-collections/community\.general/pull/7601)\, [https\://github\.com/ansible\-collections/community\.general/issues/7182](https\://github\.com/ansible\-collections/community\.general/issues/7182)\)\. -* onepassword lookup plugin \- field and section titles are now case insensitive when using op CLI version two or later\. This matches the behavior of version one \([https\://github\.com/ansible\-collections/community\.general/pull/7564](https\://github\.com/ansible\-collections/community\.general/pull/7564)\)\. -* redhat\_subscription \- use the D\-Bus registration on RHEL 7 only on 7\.4 and - greater\; older versions of RHEL 7 do not have it - \([https\://github\.com/ansible\-collections/community\.general/issues/7622](https\://github\.com/ansible\-collections/community\.general/issues/7622)\, - [https\://github\.com/ansible\-collections/community\.general/pull/7624](https\://github\.com/ansible\-collections/community\.general/pull/7624)\)\. -* terraform \- fix multiline string handling in complex variables \([https\://github\.com/ansible\-collections/community\.general/pull/7535](https\://github\.com/ansible\-collections/community\.general/pull/7535)\)\. - - -#### community\.vmware - -* vmware\_vm\_info \- Fix an AttributeError when gathering network information \([https\://github\.com/ansible\-collections/community\.vmware/pull/1919](https\://github\.com/ansible\-collections/community\.vmware/pull/1919)\)\. - - -#### community\.windows - -* Remove some code which is no longer valid for dotnet 5\+ -* community\.windows\.win\_psmodule\_info \- exception thrown when host has no Installed Module\. Fix now checks that variable \$installedModules is not null before calling the \.Contains\(\.\.\) function on it\. -* win\_rabbitmq\_plugin \- Avoid using Invoke\-Expression when running external commands -* win\_rds\_rap \- The module crashed when creating a RAP with Gateway Managed Computer Group \([https\://github\.com/ansible\-collections/community\.windows/issues/184](https\://github\.com/ansible\-collections/community\.windows/issues/184)\)\. - - -#### community\.zabbix - -* zabbix\_inventory \- fixed handeling of add\_zabbix\_groups option -* zabbix\_template \- fix template export when template\'s content has \"error\" word -* zabbix\_web role \- fix variable naming issues \(undefined\) to zabbix\_web\_version and zabbix\_web\_apt\_repository - - -#### dellemc\.openmanage - -* ome\_inventory \- The plugin returns 50 results when a group is specified\. No results are shown when a group is not specified\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/575](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/575)\)\. - - -#### hetzner\.hcloud - -* hcloud inventory \- Ensure the API client use a new cache for every cached session\. - - -#### junipernetworks\.junos - -* fix to gather l2\_interfaces facts with default port\-mode access\. - - -#### microsoft\.ad - -* debug\_ldap\_client \- handle failures when attempting to get the krb5 context and default CCache rather than fail with a traceback - - -#### netapp\.ontap - -* na\_ontap\_ems\_destination \- fix field error with certificate\.name for ONTAP 9\.11\.1 or later in REST\. -* na\_ontap\_vserver\_peer \- fix issue with peering multiple clusters with same vserver name in REST\. - - -#### purestorage\.flasharray - -* purefa\_cert \- Fixed issue where parts of the subject where not included in the CSR if they did not exist in the currently used cert\. -* purefa\_dns \- Fixed attribute error on deletion of management DNS -* purefa\_pg \- Allows a protection group to be correctly created when target is specified as well as other objects\, such as volumes or hosts -* purefa\_pgsched \- Fixed issue with disabling schedules -* purefa\_pgsnap \- Fixed incorrect parameter name - - -#### splunk\.es - -* Fixed argspec validation for plugins with empty task attributes when run with Ansible 2\.9\. - - -#### theforeman\.foreman - -* content\_view\_filter\_rule \- handle multiple rules for the same package but different architectures and versions correctly \([https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2189687](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2189687)\) - - -#### vultr\.cloud - -* instance \- Fixed an issue detecting the instance state returned by the API \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/89](https\://github\.com/vultr/ansible\-collection\-vultr/pull/89)\)\. - - -### Known Issues - - -#### dellemc\.openmanage - -* idrac\_firmware \- Issue\(279282\) \- This module does not support firmware update using HTTP\, HTTPS\, and FTP shares with authentication on iDRAC8\. -* idrac\_network\_attributes \- Issue\(279049\) \- If unsupported values are provided for the parameter ome\_network\_attributes\, then this module does not provide a correct error message\. -* ome\_device\_network\_services \- Issue\(212681\) \- The module does not provide a proper error message if unsupported values are provided for the following parameters\- port\_number\, community\_name\, max\_sessions\, max\_auth\_retries\, and idle\_timeout\. -* ome\_device\_power\_settings \- Issue\(212679\) \- The module displays the following message if the value provided for the parameter power\_cap is not within the supported range of 0 to 32767\, Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\. -* ome\_device\_quick\_deploy \- Issue\(275231\) \- This module does not deploy a new configuration to a slot that has disabled IPv6\. -* ome\_diagnostics \- Issue\(279193\) \- Export of SupportAssist collection logs to the share location fails on OME version 4\.0\.0\. -* ome\_smart\_fabric\_uplink \- Issue\(186024\) \- The module supported by OpenManage Enterprise Modular\, however it does not allow the creation of multiple uplinks of the same name\. If an uplink is created using the same name as an existing uplink\, then the existing uplink is modified\. - - -### New Plugins - - -#### Filter - -* ansible\.utils\.fact\_diff \- Find the difference between currently set facts - - -#### Lookup - -* community\.general\.onepassword\_doc \- Fetch documents stored in 1Password - - -#### Test - -* community\.general\.fqdn\_valid \- Validates fully\-qualified domain names against RFC 1123 - - -### New Modules - - -#### cisco\.ios - -* cisco\.ios\.ios\_evpn\_evi \- Resource module to configure L2VPN EVPN EVI\. -* cisco\.ios\.ios\_evpn\_global \- Resource module to configure L2VPN EVPN\. -* cisco\.ios\.ios\_vxlan\_vtep \- Resource module to configure VXLAN VTEP interface\. - - -#### community\.general - -* community\.general\.git\_config\_info \- Read git configuration -* community\.general\.gitlab\_issue \- Create\, update\, or delete GitLab issues -* community\.general\.nomad\_token \- Manage Nomad ACL tokens - - -#### purestorage\.flasharray - -* purestorage\.flasharray\.purefa\_hardware \- Manage FlashArray Hardware Identification - - -### Unchanged Collections - -* amazon\.aws \(still version 7\.0\.0\) -* ansible\.netcommon \(still version 5\.3\.0\) -* ansible\.posix \(still version 1\.5\.4\) -* azure\.azcollection \(still version 1\.19\.0\) -* check\_point\.mgmt \(still version 5\.1\.1\) -* chocolatey\.chocolatey \(still version 1\.5\.1\) -* cisco\.aci \(still version 2\.8\.0\) -* cisco\.asa \(still version 4\.0\.3\) -* cisco\.intersight \(still version 2\.0\.3\) -* cisco\.mso \(still version 2\.5\.0\) -* cisco\.ucs \(still version 1\.10\.0\) -* cloud\.common \(still version 2\.1\.4\) -* cloudscale\_ch\.cloud \(still version 2\.3\.1\) -* community\.aws \(still version 7\.0\.0\) -* community\.azure \(still version 2\.0\.0\) -* community\.ciscosmb \(still version 1\.0\.7\) -* community\.digitalocean \(still version 1\.24\.0\) -* community\.docker \(still version 3\.4\.11\) -* community\.grafana \(still version 1\.6\.1\) -* community\.hashi\_vault \(still version 6\.0\.0\) -* community\.hrobot \(still version 1\.8\.2\) -* community\.libvirt \(still version 1\.3\.0\) -* community\.mongodb \(still version 1\.6\.3\) -* community\.mysql \(still version 3\.8\.0\) -* community\.network \(still version 5\.0\.2\) -* community\.okd \(still version 2\.3\.0\) -* community\.postgresql \(still version 3\.2\.0\) -* community\.proxysql \(still version 1\.5\.1\) -* community\.rabbitmq \(still version 1\.2\.3\) -* community\.sap \(still version 2\.0\.0\) -* community\.sap\_libs \(still version 1\.4\.1\) -* community\.sops \(still version 1\.6\.7\) -* containers\.podman \(still version 1\.11\.0\) -* cyberark\.conjur \(still version 1\.2\.2\) -* cyberark\.pas \(still version 1\.0\.23\) -* dellemc\.enterprise\_sonic \(still version 2\.2\.0\) -* dellemc\.unity \(still version 1\.7\.1\) -* fortinet\.fortimanager \(still version 2\.3\.0\) -* fortinet\.fortios \(still version 2\.3\.4\) -* frr\.frr \(still version 2\.0\.2\) -* gluster\.gluster \(still version 1\.0\.2\) -* grafana\.grafana \(still version 2\.2\.3\) -* hpe\.nimble \(still version 1\.1\.4\) -* ibm\.qradar \(still version 2\.1\.0\) -* ibm\.spectrum\_virtualize \(still version 2\.0\.0\) -* ibm\.storage\_virtualize \(still version 2\.1\.0\) -* infinidat\.infinibox \(still version 1\.3\.12\) -* infoblox\.nios\_modules \(still version 1\.5\.0\) -* inspur\.sm \(still version 2\.3\.0\) -* kubernetes\.core \(still version 2\.4\.0\) -* lowlydba\.sqlserver \(still version 2\.2\.2\) -* netapp\.aws \(still version 21\.7\.1\) -* netapp\.azure \(still version 21\.10\.1\) -* netapp\.cloudmanager \(still version 21\.22\.1\) -* netapp\.elementsw \(still version 21\.7\.0\) -* netapp\.storagegrid \(still version 21\.11\.1\) -* netapp\.um\_info \(still version 21\.8\.1\) -* netapp\_eseries\.santricity \(still version 1\.4\.0\) -* netbox\.netbox \(still version 3\.15\.0\) -* ngine\_io\.cloudstack \(still version 2\.3\.0\) -* ngine\_io\.exoscale \(still version 1\.1\.0\) -* openvswitch\.openvswitch \(still version 2\.1\.1\) -* ovirt\.ovirt \(still version 3\.2\.0\) -* purestorage\.flashblade \(still version 1\.14\.0\) -* purestorage\.fusion \(still version 1\.6\.0\) -* sensu\.sensu\_go \(still version 1\.14\.0\) -* t\_systems\_mms\.icinga\_director \(still version 2\.0\.1\) -* vmware\.vmware\_rest \(still version 2\.3\.1\) -* vyos\.vyos \(still version 4\.1\.0\) -* wti\.remote \(still version 1\.0\.5\) - - -## v9\.0\.1 - -- Release Summary -- Ansible\-core -- Bugfixes -- Unchanged Collections - - -### Release Summary - -Release Date\: 2023\-11\-21 - -[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) - - -### Ansible\-core - -Ansible 9\.0\.1 contains ansible\-core version 2\.16\.0\. -This is the same version of ansible\-core as in the previous Ansible release\. - - -### Bugfixes - -* Fix the Python package metadata in setup\.cfg to require Python \>\=3\.10 to ensure that pip can properly install ansible on older Python versions\. - - -### Unchanged Collections - -* amazon\.aws \(still version 7\.0\.0\) -* ansible\.netcommon \(still version 5\.3\.0\) -* ansible\.posix \(still version 1\.5\.4\) -* ansible\.utils \(still version 2\.11\.0\) -* ansible\.windows \(still version 2\.1\.0\) -* arista\.eos \(still version 6\.2\.1\) -* awx\.awx \(still version 23\.3\.1\) -* azure\.azcollection \(still version 1\.19\.0\) -* check\_point\.mgmt \(still version 5\.1\.1\) -* chocolatey\.chocolatey \(still version 1\.5\.1\) -* cisco\.aci \(still version 2\.8\.0\) -* cisco\.asa \(still version 4\.0\.3\) -* cisco\.dnac \(still version 6\.7\.6\) -* cisco\.intersight \(still version 2\.0\.3\) -* cisco\.ios \(still version 5\.2\.0\) -* cisco\.iosxr \(still version 6\.1\.0\) -* cisco\.ise \(still version 2\.5\.16\) -* cisco\.meraki \(still version 2\.16\.14\) -* cisco\.mso \(still version 2\.5\.0\) -* cisco\.nxos \(still version 5\.2\.1\) -* cisco\.ucs \(still version 1\.10\.0\) -* cloud\.common \(still version 2\.1\.4\) -* cloudscale\_ch\.cloud \(still version 2\.3\.1\) -* community\.aws \(still version 7\.0\.0\) -* community\.azure \(still version 2\.0\.0\) -* community\.ciscosmb \(still version 1\.0\.7\) -* community\.crypto \(still version 2\.16\.0\) -* community\.digitalocean \(still version 1\.24\.0\) -* community\.dns \(still version 2\.6\.3\) -* community\.docker \(still version 3\.4\.11\) -* community\.general \(still version 8\.0\.2\) -* community\.grafana \(still version 1\.6\.1\) -* community\.hashi\_vault \(still version 6\.0\.0\) -* community\.hrobot \(still version 1\.8\.2\) -* community\.libvirt \(still version 1\.3\.0\) -* community\.mongodb \(still version 1\.6\.3\) -* community\.mysql \(still version 3\.8\.0\) -* community\.network \(still version 5\.0\.2\) -* community\.okd \(still version 2\.3\.0\) -* community\.postgresql \(still version 3\.2\.0\) -* community\.proxysql \(still version 1\.5\.1\) -* community\.rabbitmq \(still version 1\.2\.3\) -* community\.routeros \(still version 2\.10\.0\) -* community\.sap \(still version 2\.0\.0\) -* community\.sap\_libs \(still version 1\.4\.1\) -* community\.sops \(still version 1\.6\.7\) -* community\.vmware \(still version 4\.0\.0\) -* community\.windows \(still version 2\.0\.0\) -* community\.zabbix \(still version 2\.1\.0\) -* containers\.podman \(still version 1\.11\.0\) -* cyberark\.conjur \(still version 1\.2\.2\) -* cyberark\.pas \(still version 1\.0\.23\) -* dellemc\.enterprise\_sonic \(still version 2\.2\.0\) -* dellemc\.openmanage \(still version 8\.4\.0\) -* dellemc\.powerflex \(still version 2\.0\.1\) -* dellemc\.unity \(still version 1\.7\.1\) -* f5networks\.f5\_modules \(still version 1\.27\.0\) -* fortinet\.fortimanager \(still version 2\.3\.0\) -* fortinet\.fortios \(still version 2\.3\.4\) -* frr\.frr \(still version 2\.0\.2\) -* gluster\.gluster \(still version 1\.0\.2\) -* google\.cloud \(still version 1\.2\.0\) -* grafana\.grafana \(still version 2\.2\.3\) -* hetzner\.hcloud \(still version 2\.3\.0\) -* hpe\.nimble \(still version 1\.1\.4\) -* ibm\.qradar \(still version 2\.1\.0\) -* ibm\.spectrum\_virtualize \(still version 2\.0\.0\) -* ibm\.storage\_virtualize \(still version 2\.1\.0\) -* infinidat\.infinibox \(still version 1\.3\.12\) -* infoblox\.nios\_modules \(still version 1\.5\.0\) -* inspur\.ispim \(still version 2\.1\.0\) -* inspur\.sm \(still version 2\.3\.0\) -* junipernetworks\.junos \(still version 5\.3\.0\) -* kubernetes\.core \(still version 2\.4\.0\) -* lowlydba\.sqlserver \(still version 2\.2\.2\) -* microsoft\.ad \(still version 1\.3\.0\) -* netapp\.aws \(still version 21\.7\.1\) -* netapp\.azure \(still version 21\.10\.1\) -* netapp\.cloudmanager \(still version 21\.22\.1\) -* netapp\.elementsw \(still version 21\.7\.0\) -* netapp\.ontap \(still version 22\.8\.2\) -* netapp\.storagegrid \(still version 21\.11\.1\) -* netapp\.um\_info \(still version 21\.8\.1\) -* netapp\_eseries\.santricity \(still version 1\.4\.0\) -* netbox\.netbox \(still version 3\.15\.0\) -* ngine\_io\.cloudstack \(still version 2\.3\.0\) -* ngine\_io\.exoscale \(still version 1\.1\.0\) -* openstack\.cloud \(still version 2\.1\.0\) -* openvswitch\.openvswitch \(still version 2\.1\.1\) -* ovirt\.ovirt \(still version 3\.2\.0\) -* purestorage\.flasharray \(still version 1\.22\.0\) -* purestorage\.flashblade \(still version 1\.14\.0\) -* purestorage\.fusion \(still version 1\.6\.0\) -* sensu\.sensu\_go \(still version 1\.14\.0\) -* splunk\.es \(still version 2\.1\.0\) -* t\_systems\_mms\.icinga\_director \(still version 2\.0\.1\) -* telekom\_mms\.icinga\_director \(still version 1\.34\.1\) -* theforeman\.foreman \(still version 3\.14\.0\) -* vmware\.vmware\_rest \(still version 2\.3\.1\) -* vultr\.cloud \(still version 1\.10\.0\) -* vyos\.vyos \(still version 4\.1\.0\) -* wti\.remote \(still version 1\.0\.5\) - - -## v9\.0\.0 - -- Release Summary -- Removed Collections -- Added Collections -- Ansible\-core -- Included Collections -- Major Changes - - amazon\.aws - - chocolatey\.chocolatey - - cisco\.ios - - cisco\.nxos - - cloudscale\_ch\.cloud - - community\.mysql - - community\.postgresql - - community\.sap - - community\.vmware - - fortinet\.fortimanager - - fortinet\.fortios - - grafana\.grafana -- Minor Changes - - Ansible\-core - - amazon\.aws - - ansible\.netcommon - - ansible\.utils - - ansible\.windows - - arista\.eos - - check\_point\.mgmt - - chocolatey\.chocolatey - - cisco\.aci - - cisco\.ios - - cisco\.iosxr - - cisco\.meraki - - cisco\.mso - - cisco\.nxos - - community\.aws - - community\.ciscosmb - - community\.crypto - - community\.digitalocean - - community\.dns - - community\.general - - community\.grafana - - community\.libvirt - - community\.mysql - - community\.postgresql - - community\.routeros - - community\.vmware - - community\.windows - - community\.zabbix - - containers\.podman - - dellemc\.enterprise\_sonic - - dellemc\.openmanage - - dellemc\.powerflex - - dellemc\.unity - - f5networks\.f5\_modules - - fortinet\.fortimanager - - google\.cloud - - grafana\.grafana - - hetzner\.hcloud - - inspur\.ispim - - junipernetworks\.junos - - lowlydba\.sqlserver - - microsoft\.ad - - netapp\.ontap - - netbox\.netbox - - ovirt\.ovirt - - purestorage\.flasharray - - purestorage\.flashblade - - purestorage\.fusion - - sensu\.sensu\_go - - t\_systems\_mms\.icinga\_director - - theforeman\.foreman - - vultr\.cloud - - vyos\.vyos -- Breaking Changes / Porting Guide - - Ansible\-core - - amazon\.aws - - community\.aws - - community\.general - - community\.hashi\_vault - - community\.vmware - - dellemc\.enterprise\_sonic - - hetzner\.hcloud -- Deprecated Features - - Ansible\-core - - amazon\.aws - - ansible\.netcommon - - ansible\.windows - - cisco\.ios - - cisco\.iosxr - - community\.ciscosmb - - community\.crypto - - community\.general - - community\.postgresql - - community\.sap - - community\.windows - - junipernetworks\.junos - - microsoft\.ad - - purestorage\.fusion - - t\_systems\_mms\.icinga\_director -- Removed Features \(previously deprecated\) - - Ansible\-core - - ansible\.windows - - cisco\.ios - - cisco\.nxos - - community\.ciscosmb - - community\.general - - community\.hashi\_vault - - community\.vmware - - community\.windows - - dellemc\.openmanage - - hetzner\.hcloud -- Security Fixes - - Ansible\-core -- Bugfixes - - Ansible\-core - - amazon\.aws - - ansible\.netcommon - - ansible\.utils - - ansible\.windows - - arista\.eos - - check\_point\.mgmt - - chocolatey\.chocolatey - - cisco\.aci - - cisco\.ios - - cisco\.iosxr - - cisco\.ise - - cisco\.meraki - - cisco\.mso - - cisco\.nxos - - cloud\.common - - cloudscale\_ch\.cloud - - community\.aws - - community\.ciscosmb - - community\.crypto - - community\.digitalocean - - community\.dns - - community\.docker - - community\.general - - community\.grafana - - community\.hashi\_vault - - community\.hrobot - - community\.libvirt - - community\.mysql - - community\.network - - community\.postgresql - - community\.routeros - - community\.sops - - community\.vmware - - community\.windows - - community\.zabbix - - containers\.podman - - dellemc\.enterprise\_sonic - - dellemc\.openmanage - - f5networks\.f5\_modules - - fortinet\.fortimanager - - fortinet\.fortios - - google\.cloud - - hetzner\.hcloud - - junipernetworks\.junos - - microsoft\.ad - - netapp\.ontap - - netbox\.netbox - - ovirt\.ovirt - - purestorage\.flasharray - - purestorage\.flashblade - - purestorage\.fusion - - t\_systems\_mms\.icinga\_director - - theforeman\.foreman - - vultr\.cloud - - vyos\.vyos -- Known Issues - - Ansible\-core - - community\.crypto - - community\.dns - - community\.docker - - community\.general - - community\.hrobot - - community\.routeros - - community\.sops - - dellemc\.openmanage -- New Plugins - - Cliconf - - Filter - - Inventory - - Lookup -- New Modules - - amazon\.aws - - cisco\.ios - - cisco\.iosxr - - cisco\.nxos - - cloudscale\_ch\.cloud - - community\.aws - - community\.dns - - community\.general - - community\.grafana - - community\.vmware - - community\.zabbix - - containers\.podman - - dellemc\.enterprise\_sonic - - dellemc\.openmanage - - dellemc\.powerflex - - dellemc\.unity - - f5networks\.f5\_modules - - fortinet\.fortimanager - - inspur\.ispim - - netapp\.ontap - - netbox\.netbox - - ngine\_io\.exoscale - - purestorage\.flasharray - - sensu\.sensu\_go - - t\_systems\_mms\.icinga\_director - - theforeman\.foreman - - vultr\.cloud -- New Roles -- Unchanged Collections - - -### Release Summary - -\[YANKED\] Release Date\: 2023\-11\-21 [Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html) - - -### Removed Collections - -* cisco\.nso \(previously included version\: 1\.0\.3\) -* community\.fortios \(previously included version\: 1\.0\.0\) -* community\.google \(previously included version\: 1\.0\.0\) -* community\.skydive \(previously included version\: 1\.0\.0\) -* ngine\_io\.vultr \(previously included version\: 1\.1\.3\) -* servicenow\.servicenow \(previously included version\: 1\.0\.6\) - - -### Added Collections - -* ibm\.storage\_virtualize \(version 2\.1\.0\) -* telekom\_mms\.icinga\_director \(version 1\.34\.1\) - - -### Ansible\-core - -Ansible 9\.0\.0 contains ansible\-core version 2\.16\.0\. -This is a newer version than version 2\.15\.0 contained in the previous Ansible release\. - -The changes are reported in the combined changelog below\. - - -### Included Collections - -If not mentioned explicitly\, the changes are reported in the combined changelog below\. - -| Collection | Ansible 8.0.0 | Ansible 9.0.0 | Notes | -| ----------------------------- | ------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| amazon.aws | 6.0.1 | 7.0.0 | | -| ansible.netcommon | 5.1.1 | 5.3.0 | | -| ansible.utils | 2.10.3 | 2.11.0 | | -| ansible.windows | 1.14.0 | 2.1.0 | | -| arista.eos | 6.0.1 | 6.2.1 | | -| awx.awx | 22.2.0 | 23.3.1 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| azure.azcollection | 1.15.0 | 1.19.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| check_point.mgmt | 5.0.0 | 5.1.1 | | -| chocolatey.chocolatey | 1.4.0 | 1.5.1 | | -| cisco.aci | 2.6.0 | 2.8.0 | | -| cisco.asa | 4.0.0 | 4.0.3 | | -| cisco.dnac | 6.7.2 | 6.7.6 | The collection did not have a changelog in this version. | -| cisco.intersight | 1.0.27 | 2.0.3 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| cisco.ios | 4.5.0 | 5.2.0 | | -| cisco.iosxr | 5.0.2 | 6.1.0 | | -| cisco.ise | 2.5.12 | 2.5.16 | | -| cisco.meraki | 2.15.1 | 2.16.14 | | -| cisco.mso | 2.4.0 | 2.5.0 | | -| cisco.nxos | 4.3.0 | 5.2.1 | | -| cisco.ucs | 1.8.0 | 1.10.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| cloud.common | 2.1.3 | 2.1.4 | | -| cloudscale_ch.cloud | 2.2.4 | 2.3.1 | | -| community.aws | 6.0.0 | 7.0.0 | | -| community.ciscosmb | 1.0.5 | 1.0.7 | | -| community.crypto | 2.13.1 | 2.16.0 | | -| community.digitalocean | 1.23.0 | 1.24.0 | | -| community.dns | 2.5.4 | 2.6.3 | | -| community.docker | 3.4.6 | 3.4.11 | | -| community.general | 7.0.1 | 8.0.2 | | -| community.grafana | 1.5.4 | 1.6.1 | | -| community.hashi_vault | 5.0.0 | 6.0.0 | | -| community.hrobot | 1.8.0 | 1.8.2 | | -| community.libvirt | 1.2.0 | 1.3.0 | | -| community.mongodb | 1.5.2 | 1.6.3 | There are no changes recorded in the changelog. | -| community.mysql | 3.7.1 | 3.8.0 | | -| community.network | 5.0.0 | 5.0.2 | | -| community.postgresql | 2.4.1 | 3.2.0 | | -| community.routeros | 2.8.0 | 2.10.0 | | -| community.sap | 1.0.0 | 2.0.0 | | -| community.sops | 1.6.1 | 1.6.7 | | -| community.vmware | 3.6.0 | 4.0.0 | | -| community.windows | 1.13.0 | 2.0.0 | | -| community.zabbix | 2.0.0 | 2.1.0 | | -| containers.podman | 1.10.1 | 1.11.0 | | -| cyberark.conjur | 1.2.0 | 1.2.2 | You can find the collection's changelog at `[https://github.com/cyberark/ansible-conjur-collection/blob/master/CHANGELOG.md](https://github.com/cyberark/ansible-conjur-collection/blob/master/CHANGELOG.md). | -| cyberark.pas | 1.0.19 | 1.0.23 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -| dellemc.enterprise_sonic | 2.0.0 | 2.2.0 | | -| dellemc.openmanage | 7.5.0 | 8.4.0 | | -| dellemc.powerflex | 1.6.0 | 2.0.1 | | -| dellemc.unity | 1.6.0 | 1.7.1 | | -| f5networks.f5_modules | 1.24.0 | 1.27.0 | | -| fortinet.fortimanager | 2.1.7 | 2.3.0 | | -| fortinet.fortios | 2.2.3 | 2.3.4 | | -| google.cloud | 1.1.3 | 1.2.0 | | -| grafana.grafana | 2.0.0 | 2.2.3 | | -| hetzner.hcloud | 1.11.0 | 2.3.0 | | -| ibm.spectrum_virtualize | 1.12.0 | 2.0.0 | | -| ibm.storage_virtualize | | 2.1.0 | The collection was added to Ansible | -| inspur.ispim | 1.3.0 | 2.1.0 | | -| junipernetworks.junos | 5.1.0 | 5.3.0 | | -| lowlydba.sqlserver | 2.0.0 | 2.2.2 | | -| microsoft.ad | 1.1.0 | 1.3.0 | | -| netapp.aws | 21.7.0 | 21.7.1 | The collection did not have a changelog in this version. | -| netapp.azure | 21.10.0 | 21.10.1 | The collection did not have a changelog in this version. | -| netapp.cloudmanager | 21.22.0 | 21.22.1 | The collection did not have a changelog in this version. | -| netapp.ontap | 22.6.0 | 22.8.2 | | -| netapp.um_info | 21.8.0 | 21.8.1 | The collection did not have a changelog in this version. | -| netbox.netbox | 3.13.0 | 3.15.0 | | -| ngine_io.exoscale | 1.0.0 | 1.1.0 | | -| ovirt.ovirt | 3.1.2 | 3.2.0 | | -| purestorage.flasharray | 1.18.0 | 1.22.0 | | -| purestorage.flashblade | 1.11.0 | 1.14.0 | | -| purestorage.fusion | 1.4.2 | 1.6.0 | | -| sensu.sensu_go | 1.13.2 | 1.14.0 | | -| t_systems_mms.icinga_director | 1.32.2 | 2.0.1 | | -| telekom_mms.icinga_director | | 1.34.1 | The collection was added to Ansible | -| theforeman.foreman | 3.10.0 | 3.14.0 | | -| vultr.cloud | 1.7.1 | 1.10.0 | | -| vyos.vyos | 4.0.2 | 4.1.0 | | -| wti.remote | 1.0.4 | 1.0.5 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | - - -### Major Changes - - -#### amazon\.aws - -* 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\. -* 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/amazon\.aws/pull/1755](https\://github\.com/ansible\-collections/amazon\.aws/pull/1755)\)\. -* 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/amazon\.aws/pull/1762](https\://github\.com/ansible\-collections/amazon\.aws/pull/1762)\)\. -* 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/amazon\.aws/pull/1761](https\://github\.com/ansible\-collections/amazon\.aws/pull/1761)\)\. -* 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/amazon\.aws/pull/1760](https\://github\.com/ansible\-collections/amazon\.aws/pull/1760)\)\. -* 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/amazon\.aws/pull/1760](https\://github\.com/ansible\-collections/amazon\.aws/pull/1760)\)\. -* 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\. - - -#### chocolatey\.chocolatey - -* win\_chocolatey \- add options for specifying checksums -* win\_chocolatey\_facts \- add filter / gather\_subset option - - -#### cisco\.ios - -* This release removes a previously deprecated modules\, and a few attributes from this collection\. Refer to Removed Features section for details\. - - -#### cisco\.nxos - -* Refer to Removed Features section for details\. -* This release removes four of the previously deprecated modules from this collection\. - - -#### cloudscale\_ch\.cloud - -* Bump minimum required Ansible version to 2\.13\.0 - - -#### community\.mysql - -* The community\.mysql collection no longer supports ansible\-core 2\.12 and ansible\-core 2\.13\. While we take no active measures to prevent usage and there are no plans to introduce incompatible code to the modules\, we will stop testing those versions\. Both are or will soon be End of Life and if you are still using them\, you should consider upgrading to the latest Ansible / ansible\-core 2\.15 or later as soon as possible \([https\://github\.com/ansible\-collections/community\.mysql/pull/574](https\://github\.com/ansible\-collections/community\.mysql/pull/574)\)\. -* mysql\_role \- the column\_case\_sensitive argument\'s default value will be changed to true in community\.mysql 4\.0\.0\. If your playbook expected the column to be automatically uppercased for your roles privileges\, you should set this to false explicitly \([https\://github\.com/ansible\-collections/community\.mysql/issues/578](https\://github\.com/ansible\-collections/community\.mysql/issues/578)\)\. -* mysql\_user \- the column\_case\_sensitive argument\'s default value will be changed to true in community\.mysql 4\.0\.0\. If your playbook expected the column to be automatically uppercased for your users privileges\, you should set this to false explicitly \([https\://github\.com/ansible\-collections/community\.mysql/issues/577](https\://github\.com/ansible\-collections/community\.mysql/issues/577)\)\. - - -#### community\.postgresql - -* postgres modules \- the minimum version of psycopg2 library the collection supports is 2\.5\.1 \([https\://github\.com/ansible\-collections/community\.postgresql/pull/556](https\://github\.com/ansible\-collections/community\.postgresql/pull/556)\)\. -* postgresql\_pg\_hba \- remove the deprecated order argument\. The sortorder sdu is hardcoded \([https\://github\.com/ansible\-collections/community\.postgresql/pull/496](https\://github\.com/ansible\-collections/community\.postgresql/pull/496)\)\. -* postgresql\_privs \- remove the deprecated usage\_on\_types argument\. Use the type option of the type argument to explicitly manipulate privileges on PG types \([https\://github\.com/ansible\-collections/community\.postgresql/issues/208](https\://github\.com/ansible\-collections/community\.postgresql/issues/208)\)\. -* postgresql\_query \- remove the deprecated path\_to\_script and as\_single\_query arguments\. Use the postgresql\_script module to run queries from scripts \([https\://github\.com/ansible\-collections/community\.postgresql/issues/189](https\://github\.com/ansible\-collections/community\.postgresql/issues/189)\)\. -* postgresql\_user \- move the deprecated privs argument removal to community\.postgresql 4\.0\.0 \([https\://github\.com/ansible\-collections/community\.postgresql/issues/493](https\://github\.com/ansible\-collections/community\.postgresql/issues/493)\)\. -* postgresql\_user \- remove the deprecated groups argument\. Use the postgresql\_membership module instead \([https\://github\.com/ansible\-collections/community\.postgresql/issues/300](https\://github\.com/ansible\-collections/community\.postgresql/issues/300)\)\. - - -#### community\.sap - -* all modules \- everything is now a redirect to the new collection community\.sap\_libs - - -#### community\.vmware - -* vmware\_vasa \- added a new module to register/unregister a VASA provider -* vmware\_vasa\_info \- added a new module to gather the information about existing VASA provider\(s\) - - -#### fortinet\.fortimanager - -* Support all FortiManager versions in 6\.2\, 6\.4\, 7\.0\, 7\.2 and 7\.4\. 139 new modules\. -* Support token based authentication\. - - -#### fortinet\.fortios - -* Add new fortios version 7\.4\.1\. -* Add readthedocs\.yaml file\. -* Format the contents in the changelog\.yml file\. -* Improve the no\_log feature in some modules\; -* Improve the document for adding notes and examples in Q\&A for modules using Integer number as the mkey\. -* Improve the documentation and example for seq\_num in fortios\_router\_static\; -* Improve the documentation for member\_path in all the modules\; -* Support new FOS versions\. -* Update Ansible version from 2\.9 to 2\.14\. -* Update Q\&A regarding setting up FortiToken multi\-factor authentication\; -* Update Q\&A with a resolution for Ansible Always Sending GET/PUT Requests as POST Requests\. -* Update the requirement\.txt file to specify the sphinx\_rtd\_theme\=\=1\.3\.0 -* update the required Ansible version to 2\.14\.0 in the runtime\.yml file\. - - -#### grafana\.grafana - -* Addition of Grafana Server role by \@gardar -* Configurable agent user groups by \@NormanJS -* Grafana Plugins support on\-prem Grafana installation by \@ishanjainn -* Updated Service for flow mode by \@bentonam - - -### Minor Changes - -* Move setuptools configuration into the declarative setup\.cfg format\. ansible sdists still contain a stub setup\.py file\, but we recommend that users move to tools like pip and build and the PEP 517 interface instead of setuptools\' deprecated setup\.py interface \([https\://github\.com/ansible\-community/antsibull/pull/530](https\://github\.com/ansible\-community/antsibull/pull/530)\)\. - - -#### Ansible\-core - -* Add Python type hints to the Display class \([https\://github\.com/ansible/ansible/issues/80841](https\://github\.com/ansible/ansible/issues/80841)\) -* Add GALAXY\_COLLECTIONS\_PATH\_WARNING option to disable the warning given by ansible\-galaxy collection install when installing a collection to a path that isn\'t in the configured collection paths\. -* Add python3\.12 to the default INTERPRETER\_PYTHON\_FALLBACK list\. -* Add utcfromtimestamp and utcnow to ansible\.module\_utils\.compat\.datetime to return fixed offset datetime objects\. -* Add a general GALAXY\_SERVER\_TIMEOUT config option for distribution servers \([https\://github\.com/ansible/ansible/issues/79833](https\://github\.com/ansible/ansible/issues/79833)\)\. -* Added Python type annotation to connection plugins -* CLI argument parsing \- Automatically prepend to the help of CLI arguments that support being specified multiple times\. \([https\://github\.com/ansible/ansible/issues/22396](https\://github\.com/ansible/ansible/issues/22396)\) -* DEFAULT\_TRANSPORT now defaults to \'ssh\'\, the old \'smart\' option is being deprecated as versions of OpenSSH without control persist are basically not present anymore\. -* Documentation for set filters intersect\, difference\, symmetric\_difference and union now states that the returned list items are in arbitrary order\. -* Record removal\_date in runtime metadata as a string instead of a date\. -* Remove the CleansingNodeVisitor class and its usage due to the templating changes that made it superfluous\. Also simplify the Conditional class\. -* Removed exclude and recursive\-exclude commands for generated files from the MANIFEST\.in file\. These excludes were unnecessary since releases are expected to be built with a clean worktree\. -* Removed exclude commands for sanity test files from the MANIFEST\.in file\. These tests were previously excluded because they did not pass when run from an sdist\. However\, sanity tests are not expected to pass from an sdist\, so excluding some \(but not all\) of the failing tests makes little sense\. -* Removed redundant include commands from the MANIFEST\.in file\. These includes either duplicated default behavior or another command\. -* The ansible\-core sdist no longer contains pre\-generated man pages\. Instead\, a packaging/cli\-doc/build\.py script is included in the sdist\. This script can generate man pages and standalone RST documentation for ansible\-core CLI programs\. -* The docs and examples directories are no longer included in the ansible\-core sdist\. These directories have been moved to the [https\://github\.com/ansible/ansible\-documentation](https\://github\.com/ansible/ansible\-documentation) repository\. -* The minimum required setuptools version is now 66\.1\.0\, as it is the oldest version to support Python 3\.12\. -* Update ansible\_service\_mgr fact to include init system for SMGL OS family -* Use ansible\.module\_utils\.common\.text\.converters instead of ansible\.module\_utils\.\_text\. -* Use importlib\.resources\.abc\.TraversableResources instead of deprecated importlib\.abc\.TraversableResources where available \([https\:/github\.com/ansible/ansible/pull/81082](https\:/github\.com/ansible/ansible/pull/81082)\)\. -* Use include where recursive\-include is unnecessary in the MANIFEST\.in file\. -* Use package\_data instead of include\_package\_data for setup\.cfg to avoid setuptools warnings\. -* Utilize gpg check provided internally by the transaction\.run method as oppose to calling it manually\. -* Templar \- do not add the dict constructor to globals as all required Jinja2 versions already do so -* ansible\-doc \- allow to filter listing of collections and metadata dump by more than one collection \([https\://github\.com/ansible/ansible/pull/81450](https\://github\.com/ansible/ansible/pull/81450)\)\. -* ansible\-galaxy \- Add a plural option to improve ignoring multiple signature error status codes when installing or verifying collections\. A space\-separated list of error codes can follow \-\-ignore\-signature\-status\-codes in addition to specifying \-\-ignore\-signature\-status\-code multiple times \(for example\, \-\-ignore\-signature\-status\-codes NO\_PUBKEY UNEXPECTED\)\. -* ansible\-galaxy \- Remove internal configuration argument v3 \([https\://github\.com/ansible/ansible/pull/80721](https\://github\.com/ansible/ansible/pull/80721)\) -* ansible\-galaxy \- add note to the collection dependency resolver error message about pre\-releases if \-\-pre was not provided \([https\://github\.com/ansible/ansible/issues/80048](https\://github\.com/ansible/ansible/issues/80048)\)\. -* ansible\-galaxy \- used to crash out with a \"Errno 20 Not a directory\" error when extracting files from a role when hitting a file with an illegal name \([https\://github\.com/ansible/ansible/pull/81553](https\://github\.com/ansible/ansible/pull/81553)\)\. Now it gives a warning identifying the culprit file and the rule violation \(e\.g\.\, my\$class\.jar has a \$ in the name\) before crashing out\, giving the user a chance to remove the invalid file and try again\. \([https\://github\.com/ansible/ansible/pull/81555](https\://github\.com/ansible/ansible/pull/81555)\)\. -* ansible\-test \- Add Alpine 3\.18 to remotes -* ansible\-test \- Add Fedora 38 container\. -* ansible\-test \- Add Fedora 38 remote\. -* ansible\-test \- Add FreeBSD 13\.2 remote\. -* ansible\-test \- Add new pylint checker for new \# deprecated\: comments within code to trigger errors when time to remove code that has no user facing deprecation message\. Only supported in ansible\-core\, not collections\. -* ansible\-test \- Add support for RHEL 8\.8 remotes\. -* ansible\-test \- Add support for RHEL 9\.2 remotes\. -* ansible\-test \- Add support for testing with Python 3\.12\. -* ansible\-test \- Allow float values for the \-\-timeout option to the env command\. This simplifies testing\. -* ansible\-test \- Enable thread code coverage in addition to the existing multiprocessing coverage\. -* ansible\-test \- Make Python 3\.12 the default version used in the base and default containers\. -* ansible\-test \- RHEL 8\.8 provisioning can now be used with the \-\-python 3\.11 option\. -* ansible\-test \- RHEL 9\.2 provisioning can now be used with the \-\-python 3\.11 option\. -* ansible\-test \- Refactored env command logic and timeout handling\. -* ansible\-test \- Remove Fedora 37 remote support\. -* ansible\-test \- Remove Fedora 37 test container\. -* ansible\-test \- Remove Python 3\.8 and 3\.9 from RHEL 8\.8\. -* ansible\-test \- Remove obsolete embedded script for configuring WinRM on Windows remotes\. -* ansible\-test \- Removed Ubuntu 20\.04 LTS image from the \-\-remote option\. -* ansible\-test \- Removed freebsd/12\.4 remote\. -* ansible\-test \- Removed freebsd/13\.1 remote\. -* ansible\-test \- Removed test remotes\: rhel/8\.7\, rhel/9\.1 -* ansible\-test \- Removed the deprecated \-\-docker\-no\-pull option\. -* ansible\-test \- Removed the deprecated \-\-no\-pip\-check option\. -* ansible\-test \- Removed the deprecated foreman test plugin\. -* ansible\-test \- Removed the deprecated govcsim support from the vcenter test plugin\. -* ansible\-test \- Replace the pytest\-forked pytest plugin with a custom plugin\. -* ansible\-test \- The no\-get\-exception sanity test is now limited to plugins in collections\. Previously any Python file in a collection was checked for get\_exception usage\. -* ansible\-test \- The replace\-urlopen sanity test is now limited to plugins in collections\. Previously any Python file in a collection was checked for urlopen usage\. -* ansible\-test \- The use\-compat\-six sanity test is now limited to plugins in collections\. Previously any Python file in a collection was checked for six usage\. -* ansible\-test \- The openSUSE test container has been updated to openSUSE Leap 15\.5\. -* ansible\-test \- Update pip to 23\.1\.2 and setuptools to 67\.7\.2\. -* ansible\-test \- Update the default containers\. -* ansible\-test \- Update the nios\-test\-container to version 2\.0\.0\, which supports API version 2\.9\. -* ansible\-test \- Update the logic used to detect when ansible\-test is running from source\. -* ansible\-test \- Updated the CloudStack test container to version 1\.6\.1\. -* ansible\-test \- Updated the distro test containers to version 6\.3\.0 to include coverage 7\.3\.2 for Python 3\.8\+\. The alpine3 container is now based on 3\.18 instead of 3\.17 and includes Python 3\.11 instead of Python 3\.10\. -* ansible\-test \- Use datetime\.datetime\.now with tz specified instead of datetime\.datetime\.utcnow\. -* ansible\-test \- Use a context manager to perform cleanup at exit instead of using the built\-in atexit module\. -* ansible\-test \- When invoking sleep in containers during container setup\, the env command is used to avoid invoking the shell builtin\, if present\. -* ansible\-test \- remove Alpine 3\.17 from remotes -* ansible\-test — Python 3\.8–3\.12 will use coverage v7\.3\.2\. -* ansible\-test — coverage v6\.5\.0 is to be used only under Python 3\.7\. -* ansible\-vault create\: Now raises an error when opening the editor without tty\. The flag \-\-skip\-tty\-check restores previous behaviour\. -* ansible\_user\_module \- tweaked macos user defaults to reflect expected defaults \([https\://github\.com/ansible/ansible/issues/44316](https\://github\.com/ansible/ansible/issues/44316)\) -* apt \- return calculated diff while running apt clean operation\. -* blockinfile \- add append\_newline and prepend\_newline options \([https\://github\.com/ansible/ansible/issues/80835](https\://github\.com/ansible/ansible/issues/80835)\)\. -* cli \- Added short option \'\-J\' for asking for vault password \([https\://github\.com/ansible/ansible/issues/80523](https\://github\.com/ansible/ansible/issues/80523)\)\. -* command \- Add option expand\_argument\_vars to disable argument expansion and use literal values \- [https\://github\.com/ansible/ansible/issues/54162](https\://github\.com/ansible/ansible/issues/54162) -* config lookup new option show\_origin to also return the origin of a configuration value\. -* display methods for warning and deprecation are now proxied to main process when issued from a fork\. This allows for the deduplication of warnings and deprecations to work globally\. -* dnf5 \- enable environment groups installation testing in CI as its support was added\. -* dnf5 \- enable now implemented cacheonly functionality -* executor now skips persistent connection when it detects an action that does not require a connection\. -* find module \- Add ability to filter based on modes -* gather\_facts now will use gather\_timeout setting to limit parallel execution of modules that do not themselves use gather\_timeout\. -* group \- remove extraneous warning shown when user does not exist \([https\://github\.com/ansible/ansible/issues/77049](https\://github\.com/ansible/ansible/issues/77049)\)\. -* include\_vars \- os\.walk now follows symbolic links when traversing directories \([https\://github\.com/ansible/ansible/pull/80460](https\://github\.com/ansible/ansible/pull/80460)\) -* module compression is now sourced directly via config\, bypassing play\_context possibly stale values\. -* reboot \- show last error message in verbose logs \([https\://github\.com/ansible/ansible/issues/81574](https\://github\.com/ansible/ansible/issues/81574)\)\. -* service\_facts now returns more info for rcctl managed systesm \(OpenBSD\)\. -* tasks \- the retries keyword can be specified without until in which case the task is retried until it succeeds but at most retries times \([https\://github\.com/ansible/ansible/issues/20802](https\://github\.com/ansible/ansible/issues/20802)\) -* user \- add new option password\_expire\_warn \(supported on Linux only\) to set the number of days of warning before a password change is required \([https\://github\.com/ansible/ansible/issues/79882](https\://github\.com/ansible/ansible/issues/79882)\)\. -* yum\_repository \- Align module documentation with parameters - - -#### amazon\.aws - -* amazon\.aws collection \- apply isort code formatting to ensure consistent formatting of code \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1771](https\://github\.com/ansible\-collections/amazon\.aws/pull/1771)\)\. -* backup\_selection \- add validation and documentation for all conditions suboptions \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1633](https\://github\.com/ansible\-collections/amazon\.aws/pull/1633)\)\. -* cloudformation \- Add support for disable\_rollback to update stack operation \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1681](https\://github\.com/ansible\-collections/amazon\.aws/issues/1681)\)\. -* ec2\_ami \- add support for org\_arns and org\_unit\_arns in launch\_permissions \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1690](https\://github\.com/ansible\-collections/amazon\.aws/pull/1690)\)\. -* ec2\_instance \- add support for additional placement options and license\_specifications in run instance spec \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1824](https\://github\.com/ansible\-collections/amazon\.aws/issues/1824)\)\. -* ec2\_instance \- refactored ARN validation handling \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1619](https\://github\.com/ansible\-collections/amazon\.aws/pull/1619)\)\. -* ec2\_instance\_info \- add new parameter include\_attributes to describe instance attributes \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1577](https\://github\.com/ansible\-collections/amazon\.aws/pull/1577)\)\. -* ec2\_key \- add support for new parameter file\_name to save private key in when new key is created by AWS\. When this option is provided the generated private key will be removed from the module return \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1704](https\://github\.com/ansible\-collections/amazon\.aws/pull/1704)\)\. -* ec2\_metadata\_facts \- use fstrings where appropriate \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1802](https\://github\.com/ansible\-collections/amazon\.aws/pull/1802)\)\. -* ec2\_snapshot \- Add support for modifying createVolumePermission \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1464](https\://github\.com/ansible\-collections/amazon\.aws/pull/1464)\)\. -* ec2\_snapshot\_info \- Add createVolumePermission to output result \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1464](https\://github\.com/ansible\-collections/amazon\.aws/pull/1464)\)\. -* ec2\_vpc\_igw \- Add ability to attach/detach VPC to/from internet gateway \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1786](https\://github\.com/ansible\-collections/amazon\.aws/pull/1786)\)\. -* ec2\_vpc\_igw \- Add ability to change VPC attached to internet gateway \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1786](https\://github\.com/ansible\-collections/amazon\.aws/pull/1786)\)\. -* ec2\_vpc\_igw \- Add ability to create an internet gateway without attaching a VPC \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1786](https\://github\.com/ansible\-collections/amazon\.aws/pull/1786)\)\. -* ec2\_vpc\_igw \- Add ability to delete a vpc internet gateway using the id of the gateway \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1786](https\://github\.com/ansible\-collections/amazon\.aws/pull/1786)\)\. -* elb\_application\_lb\_info \- add new parameters include\_attributes\, include\_listeners and include\_listener\_rules to optionally speed up module by fetching less information \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1778](https\://github\.com/ansible\-collections/amazon\.aws/pull/1778)\)\. -* elb\_application\_lb\_info \- drop redundant describe\_load\_balancers call fetching ip\_address\_type \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1768](https\://github\.com/ansible\-collections/amazon\.aws/pull/1768)\)\. -* iam\_user \- refactored ARN validation handling \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1619](https\://github\.com/ansible\-collections/amazon\.aws/pull/1619)\)\. -* module\_utils\.arn \- add resource\_id and resource\_type to parse\_aws\_arn return values \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1619](https\://github\.com/ansible\-collections/amazon\.aws/pull/1619)\)\. -* module\_utils\.arn \- added validate\_aws\_arn function to handle common pattern matching for ARNs \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1619](https\://github\.com/ansible\-collections/amazon\.aws/pull/1619)\)\. -* module\_utils\.botocore \- migrate from vendored copy of LooseVersion to packaging\.version\.Version \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1587](https\://github\.com/ansible\-collections/amazon\.aws/pull/1587)\)\. -* rds\_cluster \- Add support for removing cluster from global db \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1705](https\://github\.com/ansible\-collections/amazon\.aws/pull/1705)\)\. -* rds\_cluster \- add support for another state choice called started\. This starts the rds cluster \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1647/files](https\://github\.com/ansible\-collections/amazon\.aws/pull/1647/files)\)\. -* rds\_cluster \- add support for another state choice called stopped\. This stops the rds cluster \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1647/files](https\://github\.com/ansible\-collections/amazon\.aws/pull/1647/files)\)\. -* route53 \- add a wait\_id return value when a change is done \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1683](https\://github\.com/ansible\-collections/amazon\.aws/pull/1683)\)\. -* route53\_health\_check \- add support for a string list parameter called child\_health\_checks to specify health checks that must be healthy for the calculated health check \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1631](https\://github\.com/ansible\-collections/amazon\.aws/pull/1631)\)\. -* route53\_health\_check \- add support for an integer parameter called health\_threshold to specify the minimum number of healthy child health checks that must be healthy for the calculated health check \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1631](https\://github\.com/ansible\-collections/amazon\.aws/pull/1631)\)\. -* route53\_health\_check \- add support for another type choice called CALCULATED \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1631](https\://github\.com/ansible\-collections/amazon\.aws/pull/1631)\)\. -* s3\_object \- Allow recursive copy of objects in S3 bucket \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1379](https\://github\.com/ansible\-collections/amazon\.aws/issues/1379)\)\. -* s3\_object \- use fstrings where appropriate \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1802](https\://github\.com/ansible\-collections/amazon\.aws/pull/1802)\)\. - - -#### ansible\.netcommon - -* Add a new cliconf plugin default that can be used when no cliconf plugin is found for a given network\_os\. This plugin only supports get\(\)\. \([https\://github\.com/ansible\-collections/ansible\.netcommon/pull/569](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/569)\) -* Add new module cli\_backup that exclusively handles configuration backup\. -* httpapi \- Add additional option ca\_path\, client\_cert\, client\_key\, and http\_agent that are available in open\_url but not to httpapi\. \([https\://github\.com/ansible\-collections/ansible\.netcommon/issues/528](https\://github\.com/ansible\-collections/ansible\.netcommon/issues/528)\) -* telnet \- add crlf option to send CRLF instead of just LF \([https\://github\.com/ansible\-collections/ansible\.netcommon/pull/440](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/440)\)\. - - -#### ansible\.utils - -* Add ipcut filter plugin\.\([https\://github\.com/ansible\-collections/ansible\.utils/issues/251](https\://github\.com/ansible\-collections/ansible\.utils/issues/251)\) -* Add ipv6form filter plugin\.\([https\://github\.com/ansible\-collections/ansible\.utils/issues/230](https\://github\.com/ansible\-collections/ansible\.utils/issues/230)\) - - -#### ansible\.windows - -* win\_certificate\_store \- the private key check\, when exporting to pkcs12\, has been modified to handle the case where the PrivateKey property is null despite it being there -* win\_find \- Added depth option to control how deep to go when scanning into the target path \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/335](https\://github\.com/ansible\-collections/ansible\.windows/issues/335) -* win\_updates \- Avoid using a scheduled task to spawn the updates background job when running as become\. This provides an alternative method available to users in case the task scheduler does not work on their system \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/543](https\://github\.com/ansible\-collections/ansible\.windows/issues/543) - - -#### arista\.eos - -* Add support for overridden operation in bgp\_global resource module\. -* arista\_config \- Relax restrictions on I\(src\) parameter so it can be used more like I\(lines\)\. - - -#### check\_point\.mgmt - -* cp\_mgmt\_vpn\_community\_star \- new fields added\. -* show command modules \- no longer return result of changed\=True\. - - -#### chocolatey\.chocolatey - -* All modules \- Ensure modules are compatible with both Chocolatey CLI v2\.x and v1\.x -* win\_chocolatey \- Improve error messages when installation of Chocolatey CLI v2\.x fails due to unmet \.NET Framework 4\.8 dependency on client - - -#### cisco\.aci - -* Add 8\.0 option for dvs\_version attribute in aci\_vmm\_controller -* Add ACI HTTPAPI plugin with multi host support \(\#114\) -* Add Match Rules for aci\_route\_control\_profile modules -* Add OSPF parameters to aci\_l3out module and create the associated test case\. -* Add aci\_access\_span\_src\_group modules for access span source group support -* Add aci\_access\_span\_src\_group\_src module for access span source support -* Add aci\_access\_span\_src\_group\_src\_path module for access span source path support -* Add aci\_bgp\_timers\_policy and aci\_bgp\_best\_path\_policy modules -* Add aci\_epg\_subnet module \(\#424\) -* Add aci\_fabric\_interface\_policy\_group module -* Add aci\_fabric\_span\_dst\_group module for fabric span destination group support -* Add aci\_fabric\_span\_src\_group module for fabric span source group support -* Add aci\_fabric\_span\_src\_group\_src module for fabric span source support -* Add aci\_fabric\_span\_src\_group\_src\_node module for fabric span source node support -* Add aci\_fabric\_span\_src\_group\_src\_path module for fabric span source path support -* Add aci\_file\_remote\_path module \(\#379\) -* Add aci\_interface\_policy\_leaf\_fc\_policy\_group and aci\_interface\_policy\_spine\_policy\_group module -* Add aci\_l3out\_bgp\_protocol\_profile module -* Add aci\_match\_community\_factor module\. -* Add aci\_route\_control\_context and aci\_match\_rule modules -* Add aci\_route\_control\_profile module -* Add aci\_vrf\_leak\_internal\_subnet module \(\#449\) -* Add description parameter for aci\_l3out\_logical\_interface\_profile -* Add hmac\-sha2\-224\, hmac\-sha2\-256\, hmac\-sha2\-384\, hmac\-sha2\-512 authentication types and description to aci\_snmp\_user module -* Add ip\_data\_plane\_learning attribute to aci\_bd\_subnet and aci\_vrf modules \(\#413\) -* Add local\_as\_number\_config and local\_as\_number attributes to support bgpLocalAsnP child object in aci\_l3out\_bgp\_peer module \(\#416\) -* Add loopback interface profile as a child class for aci\_l3out\_logical\_node\. -* Add missing attributes in aci\_interface\_policy\_leaf\_policy\_group -* Add missing attributes to aci\_l3out\_extepg module -* Add missing test cases\, fix found issues and add missing attributes for aci\_fabric\_scheduler\, aci\_firmware\_group\, aci\_firmware\_group\_node\, aci\_firmware\_policy\, aci\_interface\_policy\_fc\, aci\_interface\_policy\_lldp\, aci\_interface\_policy\_mcp\, aci\_interface\_policy\_ospf\, aci\_interface\_policy\_port\_channel\, aci\_maintenance\_group\, aci\_maintenance\_group\_node\, aci\_maintenance\_policy and aci\_tenant\_ep\_retention\_policy modules \(\#453\) -* Add node\_type and remote\_leaf\_pool\_id attributes to aci\_fabric\_node -* Add source\_port\, source\_port\_start\, source\_port\_end\, tcp\_flags and match\_only\_fragments attributes to aci\_filter\_entry module \(\#426\) -* Add support for checkmode in aci\_rest module -* Add support for configuration of fabric node control with aci\_fabric\_node\_control module -* Add support for configuration of fabric pod selectors with aci\_fabric\_pod\_selector module -* Add support for configuration of system banner and alias with aci\_system\_banner module -* Add support for configuration of system endpoint controls\, ip aging\, ep loop protection and roque endpoint control with aci\_system\_endpoint\_controls module -* Add support for configuration of system fabric wide settings with aci\_fabric\_wide\_settings module -* Add support for configuration of system global aes passphrase encryption with aci\_system\_global\_aes\_passphrase\_encryption module -* Add support for global infra dhcp relay policy configuration in aci\_dhcp\_relay -* Add support for global infra dhcp relay policy configuration in aci\_dhcp\_relay\_provider - - -#### cisco\.ios - -* Fixe an issue with some files that doesn\'t pass the PEP8 sanity check because type\(\\) \=\= \ is not allowed\. We need to use isinstance\(\\,\\) function in place -* ios\_acls \- make remarks ordered and to be applied per ace basis\. -* ios\_acls \- remarks in replaced and overridden state to be negated once per ace\. -* ios\_config \- Relax restrictions on I\(src\) parameter so it can be used more like I\(lines\)\. -* ios\_facts \- Add CPU utilization\. \([https\://github\.com/ansible\-collections/cisco\.ios/issues/779](https\://github\.com/ansible\-collections/cisco\.ios/issues/779)\) -* ios\_interfaces \- Add template attribute to provide support for cisco ios templates\. -* ios\_service \- Create module to manage service configuration on IOS switches -* ios\_snmp\_server \- Fix an issue with cbgp2 to take in count correctly the bgp traps -* ios\_snmp\_server \- Update the module to manage correctly a lot of traps not take in count -* ios\_snmp\_user \- update the user part to compare correctly the auth and privacy parts\. -* ospfv2 \- added more tests to improve coverage for the rm\_template -* ospfv2 \- aliased passive\_interface to passive\_interfaces that supports a list of interfaces -* ospfv2 \- fix area ranges rendering -* ospfv2 \- fix passive interfaces rendering -* ospfv2 \- optimized all the regex to perform better -* ospfv2 \- optimized the config side code for quicker comparison and execution - - -#### cisco\.iosxr - -* Add iosxr\_bgp\_templates module \([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/341](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/341)\)\. -* iosxr\_config \- Relax restrictions on I\(src\) parameter so it can be used more like I\(lines\)\. \([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/343](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/343)\)\. -* iosxr\_config Add updates option in return value\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/438](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/438)\)\. -* iosxr\_facts \- Add CPU utilization\. -* iosxr\_l2\_interfaces \- fix issue in supporting multiple iosxr version\. \([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/379](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/379)\)\. - - -#### cisco\.meraki - -* administered\_identities\_me\_info \- new plugin\. -* devices \- new plugin\. -* devices\_appliance\_performance\_info \- new plugin\. -* devices\_appliance\_uplinks\_settings \- new plugin\. -* devices\_appliance\_uplinks\_settings\_info \- new plugin\. -* devices\_appliance\_vmx\_authentication\_token \- new plugin\. -* devices\_blink\_leds \- new plugin\. -* devices\_camera\_analytics\_live\_info \- new plugin\. -* devices\_camera\_custom\_analytics \- new plugin\. -* devices\_camera\_custom\_analytics\_info \- new plugin\. -* devices\_camera\_generate\_snapshot \- new plugin\. -* devices\_camera\_quality\_and\_retention \- new plugin\. -* devices\_camera\_quality\_and\_retention\_info \- new plugin\. -* devices\_camera\_sense \- new plugin\. -* devices\_camera\_sense\_info \- new plugin\. -* devices\_camera\_video\_link\_info \- new plugin\. -* devices\_camera\_video\_settings \- new plugin\. -* devices\_camera\_video\_settings\_info \- new plugin\. -* devices\_camera\_wireless\_profiles \- new plugin\. -* devices\_camera\_wireless\_profiles\_info \- new plugin\. -* devices\_cellular\_gateway\_lan \- new plugin\. -* devices\_cellular\_gateway\_lan\_info \- new plugin\. -* devices\_cellular\_gateway\_port\_forwarding\_rules \- new plugin\. -* devices\_cellular\_gateway\_port\_forwarding\_rules\_info \- new plugin\. -* devices\_cellular\_sims \- new plugin\. -* devices\_cellular\_sims\_info \- new plugin\. -* devices\_info \- new plugin\. -* devices\_live\_tools\_ping \- new plugin\. -* devices\_live\_tools\_ping\_device \- new plugin\. -* devices\_live\_tools\_ping\_device\_info \- new plugin\. -* devices\_live\_tools\_ping\_info \- new plugin\. -* devices\_lldp\_cdp\_info \- new plugin\. -* devices\_management\_interface \- new plugin\. -* devices\_management\_interface\_info \- new plugin\. -* devices\_sensor\_relationships \- new plugin\. -* devices\_sensor\_relationships\_info \- new plugin\. -* devices\_switch\_ports \- new plugin\. -* devices\_switch\_ports\_cycle \- new plugin\. -* devices\_switch\_ports\_info \- new plugin\. -* devices\_switch\_ports\_statuses\_info \- new plugin\. -* devices\_switch\_routing\_interfaces \- new plugin\. -* devices\_switch\_routing\_interfaces\_dhcp \- new plugin\. -* devices\_switch\_routing\_interfaces\_dhcp\_info \- new plugin\. -* devices\_switch\_routing\_interfaces\_info \- new plugin\. -* devices\_switch\_routing\_static\_routes \- new plugin\. -* devices\_switch\_routing\_static\_routes\_info \- new plugin\. -* devices\_switch\_warm\_spare \- new plugin\. -* devices\_switch\_warm\_spare\_info \- new plugin\. -* devices\_wireless\_bluetooth\_settings \- new plugin\. -* devices\_wireless\_bluetooth\_settings\_info \- new plugin\. -* devices\_wireless\_connection\_stats\_info \- new plugin\. -* devices\_wireless\_latency\_stats\_info \- new plugin\. -* devices\_wireless\_radio\_settings \- new plugin\. -* devices\_wireless\_radio\_settings\_info \- new plugin\. -* devices\_wireless\_status\_info \- new plugin\. -* meraki\_mx\_site\_to\_site\_firewall \- Fix updating VPN rules per issue 302\. -* networks \- new plugin\. -* networks\_alerts\_history\_info \- new plugin\. -* networks\_alerts\_settings \- new plugin\. -* networks\_alerts\_settings\_info \- new plugin\. -* networks\_appliance\_connectivity\_monitoring\_destinations \- new plugin\. -* networks\_appliance\_connectivity\_monitoring\_destinations\_info \- new plugin\. -* networks\_appliance\_content\_filtering \- new plugin\. -* networks\_appliance\_content\_filtering\_categories\_info \- new plugin\. -* networks\_appliance\_content\_filtering\_info \- new plugin\. -* networks\_appliance\_firewall\_cellular\_firewall\_rules \- new plugin\. -* networks\_appliance\_firewall\_cellular\_firewall\_rules\_info \- new plugin\. -* networks\_appliance\_firewall\_firewalled\_services \- new plugin\. -* networks\_appliance\_firewall\_firewalled\_services\_info \- new plugin\. -* networks\_appliance\_firewall\_inbound\_firewall\_rules \- new plugin\. -* networks\_appliance\_firewall\_inbound\_firewall\_rules\_info \- new plugin\. -* networks\_appliance\_firewall\_l3\_firewall\_rules \- new plugin\. -* networks\_appliance\_firewall\_l3\_firewall\_rules\_info \- new plugin\. -* networks\_appliance\_firewall\_l7\_firewall\_rules \- new plugin\. -* networks\_appliance\_firewall\_l7\_firewall\_rules\_application\_categories\_info \- new plugin\. -* networks\_appliance\_firewall\_l7\_firewall\_rules\_info \- new plugin\. -* networks\_appliance\_firewall\_one\_to\_many\_nat\_rules \- new plugin\. -* networks\_appliance\_firewall\_one\_to\_many\_nat\_rules\_info \- new plugin\. -* networks\_appliance\_firewall\_one\_to\_one\_nat\_rules \- new plugin\. -* networks\_appliance\_firewall\_one\_to\_one\_nat\_rules\_info \- new plugin\. -* networks\_appliance\_firewall\_port\_forwarding\_rules \- new plugin\. -* networks\_appliance\_firewall\_port\_forwarding\_rules\_info \- new plugin\. -* networks\_appliance\_firewall\_settings \- new plugin\. -* networks\_appliance\_firewall\_settings\_info \- new plugin\. -* networks\_appliance\_ports \- new plugin\. -* networks\_appliance\_ports\_info \- new plugin\. -* networks\_appliance\_prefixes\_delegated\_statics \- new plugin\. -* networks\_appliance\_prefixes\_delegated\_statics\_info \- new plugin\. -* networks\_appliance\_security\_intrusion \- new plugin\. -* networks\_appliance\_security\_intrusion\_info \- new plugin\. -* networks\_appliance\_security\_malware \- new plugin\. -* networks\_appliance\_security\_malware\_info \- new plugin\. -* networks\_appliance\_settings \- new plugin\. -* networks\_appliance\_settings\_info \- new plugin\. -* networks\_appliance\_single\_lan \- new plugin\. -* networks\_appliance\_single\_lan\_info \- new plugin\. -* networks\_appliance\_ssids \- new plugin\. -* networks\_appliance\_ssids\_info \- new plugin\. -* networks\_appliance\_static\_routes \- new plugin\. -* networks\_appliance\_static\_routes\_info \- new plugin\. -* networks\_appliance\_traffic\_shaping \- new plugin\. -* networks\_appliance\_traffic\_shaping\_custom\_performance\_classes \- new plugin\. -* networks\_appliance\_traffic\_shaping\_info \- new plugin\. -* networks\_appliance\_traffic\_shaping\_rules \- new plugin\. -* networks\_appliance\_traffic\_shaping\_rules\_info \- new plugin\. -* networks\_appliance\_traffic\_shaping\_uplink\_bandwidth \- new plugin\. -* networks\_appliance\_traffic\_shaping\_uplink\_bandwidth\_info \- new plugin\. -* networks\_appliance\_traffic\_shaping\_uplink\_selection \- new plugin\. -* networks\_appliance\_traffic\_shaping\_uplink\_selection\_info \- new plugin\. -* networks\_appliance\_vlans \- new plugin\. -* networks\_appliance\_vlans\_info \- new plugin\. -* networks\_appliance\_vlans\_settings \- new plugin\. -* networks\_appliance\_vlans\_settings\_info \- new plugin\. -* networks\_appliance\_vpn\_bgp \- new plugin\. -* networks\_appliance\_vpn\_bgp\_info \- new plugin\. -* networks\_appliance\_vpn\_site\_to\_site\_vpn \- new plugin\. -* networks\_appliance\_vpn\_site\_to\_site\_vpn\_info \- new plugin\. -* networks\_appliance\_warm\_spare \- new plugin\. -* networks\_appliance\_warm\_spare\_info \- new plugin\. -* networks\_appliance\_warm\_spare\_swap \- new plugin\. -* networks\_bind \- new plugin\. -* networks\_bluetooth\_clients\_info \- new plugin\. -* networks\_camera\_quality\_retention\_profiles \- new plugin\. -* networks\_camera\_quality\_retention\_profiles\_info \- new plugin\. -* networks\_camera\_wireless\_profiles \- new plugin\. -* networks\_camera\_wireless\_profiles\_info \- new plugin\. -* networks\_cellular\_gateway\_connectivity\_monitoring\_destinations \- new plugin\. -* networks\_cellular\_gateway\_connectivity\_monitoring\_destinations\_info \- new plugin\. -* networks\_cellular\_gateway\_dhcp \- new plugin\. -* networks\_cellular\_gateway\_dhcp\_info \- new plugin\. -* networks\_cellular\_gateway\_subnet\_pool \- new plugin\. -* networks\_cellular\_gateway\_subnet\_pool\_info \- new plugin\. -* networks\_cellular\_gateway\_uplink \- new plugin\. -* networks\_cellular\_gateway\_uplink\_info \- new plugin\. -* networks\_clients\_info \- new plugin\. -* networks\_clients\_overview\_info \- new plugin\. -* networks\_clients\_policy \- new plugin\. -* networks\_clients\_policy\_info \- new plugin\. -* networks\_clients\_provision \- new plugin\. -* networks\_clients\_splash\_authorization\_status \- new plugin\. -* networks\_clients\_splash\_authorization\_status\_info \- new plugin\. -* networks\_devices\_claim \- new plugin\. -* networks\_devices\_claim\_vmx \- new plugin\. -* networks\_devices\_remove \- new plugin\. -* networks\_events\_event\_types\_info \- new plugin\. -* networks\_events\_info \- new plugin\. -* networks\_firmware\_upgrades \- new plugin\. -* networks\_firmware\_upgrades\_info \- new plugin\. -* networks\_firmware\_upgrades\_rollbacks \- new plugin\. -* networks\_firmware\_upgrades\_staged\_events \- new plugin\. -* networks\_firmware\_upgrades\_staged\_events\_defer \- new plugin\. -* networks\_firmware\_upgrades\_staged\_events\_info \- new plugin\. -* networks\_firmware\_upgrades\_staged\_events\_rollbacks \- new plugin\. -* networks\_firmware\_upgrades\_staged\_groups \- new plugin\. -* networks\_firmware\_upgrades\_staged\_groups\_info \- new plugin\. -* networks\_firmware\_upgrades\_staged\_stages \- new plugin\. -* networks\_firmware\_upgrades\_staged\_stages\_info \- new plugin\. -* networks\_floor\_plans \- new plugin\. -* networks\_floor\_plans\_info \- new plugin\. -* networks\_group\_policies \- new plugin\. -* networks\_group\_policies\_info \- new plugin\. -* networks\_health\_alerts\_info \- new plugin\. -* networks\_info \- new plugin\. -* networks\_insight\_applications\_health\_by\_time\_info \- new plugin\. -* networks\_meraki\_auth\_users \- new plugin\. -* networks\_meraki\_auth\_users\_info \- new plugin\. -* networks\_mqtt\_brokers \- new plugin\. -* networks\_netflow \- new plugin\. -* networks\_netflow\_info \- new plugin\. -* networks\_pii\_pii\_keys\_info \- new plugin\. -* networks\_pii\_requests\_delete \- new plugin\. -* networks\_pii\_requests\_info \- new plugin\. -* networks\_pii\_sm\_devices\_for\_key\_info \- new plugin\. -* networks\_pii\_sm\_owners\_for\_key\_info \- new plugin\. -* networks\_policies\_by\_client\_info \- new plugin\. -* networks\_sensor\_alerts\_current\_overview\_by\_metric\_info \- new plugin\. -* networks\_sensor\_alerts\_overview\_by\_metric\_info \- new plugin\. -* networks\_sensor\_alerts\_profiles \- new plugin\. -* networks\_sensor\_alerts\_profiles\_info \- new plugin\. -* networks\_sensor\_mqtt\_brokers \- new plugin\. -* networks\_sensor\_mqtt\_brokers\_info \- new plugin\. -* networks\_sensor\_relationships\_info \- new plugin\. -* networks\_settings \- new plugin\. -* networks\_settings\_info \- new plugin\. -* networks\_sm\_bypass\_activation\_lock\_attempts \- new plugin\. -* networks\_sm\_bypass\_activation\_lock\_attempts\_info \- new plugin\. -* networks\_sm\_devices\_cellular\_usage\_history\_info \- new plugin\. -* networks\_sm\_devices\_certs\_info \- new plugin\. -* networks\_sm\_devices\_checkin \- new plugin\. -* networks\_sm\_devices\_connectivity\_info \- new plugin\. -* networks\_sm\_devices\_desktop\_logs\_info \- new plugin\. -* networks\_sm\_devices\_device\_command\_logs\_info \- new plugin\. -* networks\_sm\_devices\_device\_profiles\_info \- new plugin\. -* networks\_sm\_devices\_fields \- new plugin\. -* networks\_sm\_devices\_info \- new plugin\. -* networks\_sm\_devices\_lock \- new plugin\. -* networks\_sm\_devices\_modify\_tags \- new plugin\. -* networks\_sm\_devices\_move \- new plugin\. -* networks\_sm\_devices\_network\_adapters\_info \- new plugin\. -* networks\_sm\_devices\_performance\_history\_info \- new plugin\. -* networks\_sm\_devices\_refresh\_details \- new plugin\. -* networks\_sm\_devices\_security\_centers\_info \- new plugin\. -* networks\_sm\_devices\_unenroll \- new plugin\. -* networks\_sm\_devices\_wipe \- new plugin\. -* networks\_sm\_devices\_wlan\_lists\_info \- new plugin\. -* networks\_sm\_profiles\_info \- new plugin\. -* networks\_sm\_target\_groups \- new plugin\. -* networks\_sm\_target\_groups\_info \- new plugin\. -* networks\_sm\_trusted\_access\_configs\_info \- new plugin\. -* networks\_sm\_user\_access\_devices\_delete \- new plugin\. -* networks\_sm\_user\_access\_devices\_info \- new plugin\. -* networks\_sm\_users\_device\_profiles\_info \- new plugin\. -* networks\_sm\_users\_info \- new plugin\. -* networks\_sm\_users\_softwares\_info \- new plugin\. -* networks\_snmp \- new plugin\. -* networks\_snmp\_info \- new plugin\. -* networks\_split \- new plugin\. -* networks\_switch\_access\_control\_lists \- new plugin\. -* networks\_switch\_access\_control\_lists\_info \- new plugin\. -* networks\_switch\_access\_policies \- new plugin\. -* networks\_switch\_access\_policies\_info \- new plugin\. -* networks\_switch\_alternate\_management\_interface \- new plugin\. -* networks\_switch\_alternate\_management\_interface\_info \- new plugin\. -* networks\_switch\_dhcp\_server\_policy \- new plugin\. -* networks\_switch\_dhcp\_server\_policy\_arp\_inspection\_trusted\_servers \- new plugin\. -* networks\_switch\_dhcp\_server\_policy\_arp\_inspection\_trusted\_servers\_info \- new plugin\. -* networks\_switch\_dhcp\_server\_policy\_arp\_inspection\_warnings\_by\_device\_info \- new plugin\. -* networks\_switch\_dhcp\_server\_policy\_info \- new plugin\. -* networks\_switch\_dhcp\_v4\_servers\_seen\_info \- new plugin\. -* networks\_switch\_dscp\_to\_cos\_mappings \- new plugin\. -* networks\_switch\_dscp\_to\_cos\_mappings\_info \- new plugin\. -* networks\_switch\_link\_aggregations \- new plugin\. -* networks\_switch\_link\_aggregations\_info \- new plugin\. -* networks\_switch\_mtu \- new plugin\. -* networks\_switch\_mtu\_info \- new plugin\. -* networks\_switch\_port\_schedules \- new plugin\. -* networks\_switch\_port\_schedules\_info \- new plugin\. -* networks\_switch\_qos\_rules\_order \- new plugin\. -* networks\_switch\_qos\_rules\_order\_info \- new plugin\. -* networks\_switch\_routing\_multicast \- new plugin\. -* networks\_switch\_routing\_multicast\_info \- new plugin\. -* networks\_switch\_routing\_multicast\_rendezvous\_points \- new plugin\. -* networks\_switch\_routing\_multicast\_rendezvous\_points\_info \- new plugin\. -* networks\_switch\_routing\_ospf \- new plugin\. -* networks\_switch\_routing\_ospf\_info \- new plugin\. -* networks\_switch\_settings \- new plugin\. -* networks\_switch\_settings\_info \- new plugin\. -* networks\_switch\_stacks \- new plugin\. -* networks\_switch\_stacks\_add \- new plugin\. -* networks\_switch\_stacks\_info \- new plugin\. -* networks\_switch\_stacks\_remove \- new plugin\. -* networks\_switch\_stacks\_routing\_interfaces \- new plugin\. -* networks\_switch\_stacks\_routing\_interfaces\_dhcp \- new plugin\. -* networks\_switch\_stacks\_routing\_interfaces\_dhcp\_info \- new plugin\. -* networks\_switch\_stacks\_routing\_interfaces\_info \- new plugin\. -* networks\_switch\_stacks\_routing\_static\_routes \- new plugin\. -* networks\_switch\_stacks\_routing\_static\_routes\_info \- new plugin\. -* networks\_switch\_storm\_control \- new plugin\. -* networks\_switch\_storm\_control\_info \- new plugin\. -* networks\_switch\_stp \- new plugin\. -* networks\_switch\_stp\_info \- new plugin\. -* networks\_syslog\_servers \- new plugin\. -* networks\_syslog\_servers\_info \- new plugin\. -* networks\_topology\_link\_layer\_info \- new plugin\. -* networks\_traffic\_analysis \- new plugin\. -* networks\_traffic\_analysis\_info \- new plugin\. -* networks\_traffic\_shaping\_application\_categories\_info \- new plugin\. -* networks\_traffic\_shaping\_dscp\_tagging\_options\_info \- new plugin\. -* networks\_unbind \- new plugin\. -* networks\_webhooks\_http\_servers \- new plugin\. -* networks\_webhooks\_http\_servers\_info \- new plugin\. -* networks\_webhooks\_payload\_templates \- new plugin\. -* networks\_webhooks\_payload\_templates\_info \- new plugin\. -* networks\_webhooks\_webhook\_tests\_info \- new plugin\. -* networks\_wireless\_alternate\_management\_interface \- new plugin\. -* networks\_wireless\_alternate\_management\_interface\_info \- new plugin\. -* networks\_wireless\_billing \- new plugin\. -* networks\_wireless\_billing\_info \- new plugin\. -* networks\_wireless\_bluetooth\_settings \- new plugin\. -* networks\_wireless\_bluetooth\_settings\_info \- new plugin\. -* networks\_wireless\_channel\_utilization\_history\_info \- new plugin\. -* networks\_wireless\_client\_count\_history\_info \- new plugin\. -* networks\_wireless\_clients\_connection\_stats\_info \- new plugin\. -* networks\_wireless\_clients\_latency\_stats\_info \- new plugin\. -* networks\_wireless\_connection\_stats\_info \- new plugin\. -* networks\_wireless\_data\_rate\_history\_info \- new plugin\. -* networks\_wireless\_devices\_connection\_stats\_info \- new plugin\. -* networks\_wireless\_failed\_connections\_info \- new plugin\. -* networks\_wireless\_latency\_history\_info \- new plugin\. -* networks\_wireless\_latency\_stats\_info \- new plugin\. -* networks\_wireless\_mesh\_statuses\_info \- new plugin\. -* networks\_wireless\_rf\_profiles \- new plugin\. -* networks\_wireless\_rf\_profiles\_info \- new plugin\. -* networks\_wireless\_settings \- new plugin\. -* networks\_wireless\_settings\_info \- new plugin\. -* networks\_wireless\_signal\_quality\_history\_info \- new plugin\. -* networks\_wireless\_ssids \- new plugin\. -* networks\_wireless\_ssids\_bonjour\_forwarding \- new plugin\. -* networks\_wireless\_ssids\_bonjour\_forwarding\_info \- new plugin\. -* networks\_wireless\_ssids\_device\_type\_group\_policies \- new plugin\. -* networks\_wireless\_ssids\_device\_type\_group\_policies\_info \- new plugin\. -* networks\_wireless\_ssids\_eap\_override \- new plugin\. -* networks\_wireless\_ssids\_eap\_override\_info \- new plugin\. -* networks\_wireless\_ssids\_firewall\_l3\_firewall\_rules \- new plugin\. -* networks\_wireless\_ssids\_firewall\_l3\_firewall\_rules\_info \- new plugin\. -* networks\_wireless\_ssids\_firewall\_l7\_firewall\_rules \- new plugin\. -* networks\_wireless\_ssids\_firewall\_l7\_firewall\_rules\_info \- new plugin\. -* networks\_wireless\_ssids\_hotspot20 \- new plugin\. -* networks\_wireless\_ssids\_hotspot20\_info \- new plugin\. -* networks\_wireless\_ssids\_identity\_psks \- new plugin\. -* networks\_wireless\_ssids\_identity\_psks\_info \- new plugin\. -* networks\_wireless\_ssids\_info \- new plugin\. -* networks\_wireless\_ssids\_schedules \- new plugin\. -* networks\_wireless\_ssids\_schedules\_info \- new plugin\. -* networks\_wireless\_ssids\_splash\_settings \- new plugin\. -* networks\_wireless\_ssids\_splash\_settings\_info \- new plugin\. -* networks\_wireless\_ssids\_traffic\_shaping\_rules \- new plugin\. -* networks\_wireless\_ssids\_traffic\_shaping\_rules\_info \- new plugin\. -* networks\_wireless\_ssids\_vpn \- new plugin\. -* networks\_wireless\_ssids\_vpn\_info \- new plugin\. -* networks\_wireless\_usage\_history\_info \- new plugin\. -* organizations \- new plugin\. -* organizations\_action\_batches \- new plugin\. -* organizations\_action\_batches\_info \- new plugin\. -* organizations\_adaptive\_policy\_acls \- new plugin\. -* organizations\_adaptive\_policy\_acls\_info \- new plugin\. -* organizations\_adaptive\_policy\_groups \- new plugin\. -* organizations\_adaptive\_policy\_groups\_info \- new plugin\. -* organizations\_adaptive\_policy\_overview\_info \- new plugin\. -* organizations\_adaptive\_policy\_policies \- new plugin\. -* organizations\_adaptive\_policy\_policies\_info \- new plugin\. -* organizations\_adaptive\_policy\_settings \- new plugin\. -* organizations\_adaptive\_policy\_settings\_info \- new plugin\. -* organizations\_admins \- new plugin\. -* organizations\_admins\_info \- new plugin\. -* organizations\_alerts\_profiles \- new plugin\. -* organizations\_api\_requests\_info \- new plugin\. -* organizations\_api\_requests\_overview\_info \- new plugin\. -* organizations\_api\_requests\_overview\_response\_codes\_by\_interval\_info \- new plugin\. -* organizations\_appliance\_security\_intrusion \- new plugin\. -* organizations\_appliance\_security\_intrusion\_info \- new plugin\. -* organizations\_appliance\_vpn\_third\_party\_vpnpeers \- new plugin\. -* organizations\_appliance\_vpn\_third\_party\_vpnpeers\_info \- new plugin\. -* organizations\_appliance\_vpn\_vpn\_firewall\_rules \- new plugin\. -* organizations\_appliance\_vpn\_vpn\_firewall\_rules\_info \- new plugin\. -* organizations\_branding\_policies \- new plugin\. -* organizations\_branding\_policies\_info \- new plugin\. -* organizations\_branding\_policies\_priorities \- new plugin\. -* organizations\_branding\_policies\_priorities\_info \- new plugin\. -* organizations\_camera\_custom\_analytics\_artifacts \- new plugin\. -* organizations\_camera\_custom\_analytics\_artifacts\_info \- new plugin\. -* organizations\_cellular\_gateway\_uplink\_statuses\_info \- new plugin\. -* organizations\_claim \- new plugin\. -* organizations\_clients\_bandwidth\_usage\_history\_info \- new plugin\. -* organizations\_clients\_overview\_info \- new plugin\. -* organizations\_clients\_search\_info \- new plugin\. -* organizations\_clone \- new plugin\. -* organizations\_config\_templates \- new plugin\. -* organizations\_config\_templates\_info \- new plugin\. -* organizations\_config\_templates\_switch\_profiles\_info \- new plugin\. -* organizations\_config\_templates\_switch\_profiles\_ports \- new plugin\. -* organizations\_config\_templates\_switch\_profiles\_ports\_info \- new plugin\. -* organizations\_devices\_availabilities\_info \- new plugin\. -* organizations\_devices\_info \- new plugin\. -* organizations\_devices\_power\_modules\_statuses\_by\_device\_info \- new plugin\. -* organizations\_devices\_provisioning\_statuses\_info \- new plugin\. -* organizations\_devices\_statuses\_info \- new plugin\. -* organizations\_devices\_statuses\_overview\_info \- new plugin\. -* organizations\_devices\_uplinks\_addresses\_by\_device\_info \- new plugin\. -* organizations\_devices\_uplinks\_loss\_and\_latency\_info \- new plugin\. -* organizations\_early\_access\_features\_info \- new plugin\. -* organizations\_early\_access\_features\_opt\_ins \- new plugin\. -* organizations\_early\_access\_features\_opt\_ins\_info \- new plugin\. -* organizations\_firmware\_upgrades\_by\_device\_info \- new plugin\. -* organizations\_firmware\_upgrades\_info \- new plugin\. -* organizations\_info \- new plugin\. -* organizations\_insight\_applications\_info \- new plugin\. -* organizations\_insight\_monitored\_media\_servers \- new plugin\. -* organizations\_insight\_monitored\_media\_servers\_info \- new plugin\. -* organizations\_inventory\_claim \- new plugin\. -* organizations\_inventory\_devices\_info \- new plugin\. -* organizations\_inventory\_onboarding\_cloud\_monitoring\_export\_events \- new plugin\. -* organizations\_inventory\_onboarding\_cloud\_monitoring\_imports \- new plugin\. -* organizations\_inventory\_onboarding\_cloud\_monitoring\_imports\_info \- new plugin\. -* organizations\_inventory\_onboarding\_cloud\_monitoring\_networks\_info \- new plugin\. -* organizations\_inventory\_onboarding\_cloud\_monitoring\_prepare \- new plugin\. -* organizations\_inventory\_release \- new plugin\. -* organizations\_licenses \- new plugin\. -* organizations\_licenses\_assign\_seats \- new plugin\. -* organizations\_licenses\_info \- new plugin\. -* organizations\_licenses\_move \- new plugin\. -* organizations\_licenses\_move\_seats \- new plugin\. -* organizations\_licenses\_overview\_info \- new plugin\. -* organizations\_licenses\_renew\_seats \- new plugin\. -* organizations\_licensing\_coterm\_licenses\_info \- new plugin\. -* organizations\_licensing\_coterm\_licenses\_move \- new plugin\. -* organizations\_login\_security \- new plugin\. -* organizations\_login\_security\_info \- new plugin\. -* organizations\_networks\_combine \- new plugin\. -* organizations\_openapi\_spec\_info \- new plugin\. -* organizations\_policy\_objects \- new plugin\. -* organizations\_policy\_objects\_groups \- new plugin\. -* organizations\_policy\_objects\_groups\_info \- new plugin\. -* organizations\_policy\_objects\_info \- new plugin\. -* organizations\_saml \- new plugin\. -* organizations\_saml\_idps \- new plugin\. -* organizations\_saml\_idps\_info \- new plugin\. -* organizations\_saml\_info \- new plugin\. -* organizations\_saml\_roles \- new plugin\. -* organizations\_saml\_roles\_info \- new plugin\. -* organizations\_sensor\_readings\_history\_info \- new plugin\. -* organizations\_sensor\_readings\_latest\_info \- new plugin\. -* organizations\_sm\_apns\_cert\_info \- new plugin\. -* organizations\_sm\_vpp\_accounts\_info \- new plugin\. -* organizations\_snmp \- new plugin\. -* organizations\_snmp\_info \- new plugin\. -* organizations\_summary\_top\_appliances\_by\_utilization\_info \- new plugin\. -* organizations\_summary\_top\_clients\_by\_usage\_info \- new plugin\. -* organizations\_summary\_top\_clients\_manufacturers\_by\_usage\_info \- new plugin\. -* organizations\_summary\_top\_devices\_by\_usage\_info \- new plugin\. -* organizations\_summary\_top\_devices\_models\_by\_usage\_info \- new plugin\. -* organizations\_summary\_top\_ssids\_by\_usage\_info \- new plugin\. -* organizations\_summary\_top\_switches\_by\_energy\_usage\_info \- new plugin\. -* organizations\_switch\_devices\_clone \- new plugin\. -* organizations\_switch\_ports\_by\_switch\_info \- new plugin\. -* organizations\_uplinks\_statuses\_info \- new plugin\. -* organizations\_users \- new plugin\. -* organizations\_webhooks\_logs\_info \- new plugin\. -* organizations\_wireless\_devices\_ethernet\_statuses\_info \- new plugin\. - - -#### cisco\.mso - -* Add login domain attribute to mso httpapi connection plugin with restructure of connection parameter handling -* Add mso\_schema\_template\_anp\_epg\_useg\_attribute and mso\_schema\_site\_anp\_epg\_useg\_attribute modules to manage EPG uSeg attributes \(\#370\) - - -#### cisco\.nxos - -* Add nxos\_bgp\_templates module\. -* Added new module fc\_interfaces -* bgp\_global \- support remote\-as as a route\-map \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/741](https\://github\.com/ansible\-collections/cisco\.nxos/issues/741)\)\. -* bgp\_neighbor\_address\_family \- support rewrite\-rt\-asn for ipv4 mvpn \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/741](https\://github\.com/ansible\-collections/cisco\.nxos/issues/741)\)\. -* bgp\_templates \- Add support for safi evpn \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/739](https\://github\.com/ansible\-collections/cisco\.nxos/issues/739)\)\. -* bgp\_templates \- Add support for send\_community \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/740](https\://github\.com/ansible\-collections/cisco\.nxos/issues/740)\)\. -* nxos\_facts \- add cpu utilization data to facts\. -* nxos\_user \- Add support for hashed passwords\. \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/370](https\://github\.com/ansible\-collections/cisco\.nxos/issues/370)\)\. -* nxos\_user \- Added dev\-ops role to BUILTINS \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/690](https\://github\.com/ansible\-collections/cisco\.nxos/issues/690)\) -* route\_maps \- support extcommunity rt option \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/743](https\://github\.com/ansible\-collections/cisco\.nxos/issues/743)\)\. - - -#### community\.aws - -* api\_gateway \- add support for parameters name\, lookup\, tags and purge\_tags \([https\://github\.com/ansible\-collections/community\.aws/pull/1845](https\://github\.com/ansible\-collections/community\.aws/pull/1845)\)\. -* api\_gateway \- use fstrings where appropriate \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1962](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](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](https\://github\.com/ansible\-collections/community\.aws/pull/1962)\) -* dynamodb\_table \- added waiter when updating indexes to avoid concurrency issues \([https\://github\.com/ansible\-collections/community\.aws/pull/1866](https\://github\.com/ansible\-collections/community\.aws/pull/1866)\)\. -* dynamodb\_table \- increased default timeout based on time to update indexes in CI \([https\://github\.com/ansible\-collections/community\.aws/pull/1866](https\://github\.com/ansible\-collections/community\.aws/pull/1866)\)\. -* ec2\_vpc\_vpn \- add support for connecting VPNs to a transit gateway \([https\://github\.com/ansible\-collections/community\.aws/pull/1877](https\://github\.com/ansible\-collections/community\.aws/pull/1877)\)\. -* ecs\_taskdefinition \- Add parameter runtime\_platform \([https\://github\.com/ansible\-collections/community\.aws/issues/1891](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](https\://github\.com/ansible\-collections/community\.aws/pull/1994)\)\. -* iam\_group \- refactored ARN validation handling \([https\://github\.com/ansible\-collections/community\.aws/pull/1848](https\://github\.com/ansible\-collections/community\.aws/pull/1848)\)\. -* iam\_role \- refactored ARN validation handling \([https\://github\.com/ansible\-collections/community\.aws/pull/1848](https\://github\.com/ansible\-collections/community\.aws/pull/1848)\)\. -* sns\_topic \- refactored ARN validation handling \([https\://github\.com/ansible\-collections/community\.aws/pull/1848](https\://github\.com/ansible\-collections/community\.aws/pull/1848)\)\. - - -#### community\.ciscosmb - -* added Ansible playbook examples cismosmb\_inventory\_template\.yml\, cismosmb\_gather\_facts\.yml\, cismosmb\_commands\.yml -* no longer testing for ansible 2\.9 and for Python 2\.6 / 2\.7 -* removed unused portion of code in cliconf/ciscosmb\.yml -* test Ansible 2\.14 - - -#### community\.crypto - -* acme\_certificate \- allow to use no challenge by providing no challenge for the challenge option\. This is needed for ACME servers where validation is done without challenges \([https\://github\.com/ansible\-collections/community\.crypto/issues/613](https\://github\.com/ansible\-collections/community\.crypto/issues/613)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/615](https\://github\.com/ansible\-collections/community\.crypto/pull/615)\)\. -* acme\_certificate \- validate and wait for challenges in parallel instead handling them one after another \([https\://github\.com/ansible\-collections/community\.crypto/pull/617](https\://github\.com/ansible\-collections/community\.crypto/pull/617)\)\. -* luks\_devices \- add new options keyslot\, new\_keyslot\, and remove\_keyslot to allow adding/removing keys to/from specific keyslots \([https\://github\.com/ansible\-collections/community\.crypto/pull/664](https\://github\.com/ansible\-collections/community\.crypto/pull/664)\)\. -* openssh\_keypair \- fail when comment cannot be updated \([https\://github\.com/ansible\-collections/community\.crypto/pull/646](https\://github\.com/ansible\-collections/community\.crypto/pull/646)\)\. -* x509\_certificate\_info \- added support for certificates in DER format when using path parameter \([https\://github\.com/ansible\-collections/community\.crypto/issues/603](https\://github\.com/ansible\-collections/community\.crypto/issues/603)\)\. - - -#### community\.digitalocean - -* documentation \- use C\(true\) and C\(false\) for boolean values in documentation and examples \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/303](https\://github\.com/ansible\-collections/community\.digitalocean/issues/303)\)\. -* inventory plugin \- drop C\(api\_token\) in favor of C\(oauth\_token\) for consistency \([https\://github\.com/ansible\-collections/community\.digitalocean/issues/300](https\://github\.com/ansible\-collections/community\.digitalocean/issues/300)\)\. -* tests \- add C\(sanity\)\, C\(units\)\, and C\(psf/black\) back on merge into C\(main\) \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/311](https\://github\.com/ansible\-collections/community\.digitalocean/pull/311)\)\. -* tests \- drop Ansible 2\.9 and Ansible Core 2\.10 and 2\.11 \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/310](https\://github\.com/ansible\-collections/community\.digitalocean/pull/310)\)\. -* tests \- remove the daily runs \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/310](https\://github\.com/ansible\-collections/community\.digitalocean/pull/310)\)\. -* tests \- run C\(psf/black\) across all files \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/310](https\://github\.com/ansible\-collections/community\.digitalocean/pull/310)\)\. -* tests \- test against Ansible Core 2\.12\, 2\.13\, and 2\.14 \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/310](https\://github\.com/ansible\-collections/community\.digitalocean/pull/310)\)\. - - -#### community\.dns - -* wait\_for\_txt \- add servfail\_retries parameter that allows retrying after SERVFAIL errors \([https\://github\.com/ansible\-collections/community\.dns/pull/159](https\://github\.com/ansible\-collections/community\.dns/pull/159)\)\. -* wait\_for\_txt\, resolver module utils \- use [EDNS](https\://en\.wikipedia\.org/wiki/Extension\_Mechanisms\_for\_DNS) \([https\://github\.com/ansible\-collections/community\.dns/pull/158](https\://github\.com/ansible\-collections/community\.dns/pull/158)\)\. - - -#### community\.general - -* The collection will start using semantic markup \([https\://github\.com/ansible\-collections/community\.general/pull/6539](https\://github\.com/ansible\-collections/community\.general/pull/6539)\)\. -* VarDict module utils \- add method VarDict\.as\_dict\(\) to convert to a plain dict object \([https\://github\.com/ansible\-collections/community\.general/pull/6602](https\://github\.com/ansible\-collections/community\.general/pull/6602)\)\. -* apt\_rpm \- extract package name from local \.rpm path when verifying - installation success\. Allows installing packages from local \.rpm files - \([https\://github\.com/ansible\-collections/community\.general/pull/7396](https\://github\.com/ansible\-collections/community\.general/pull/7396)\)\. -* cargo \- add option executable\, which allows user to specify path to the cargo binary \([https\://github\.com/ansible\-collections/community\.general/pull/7352](https\://github\.com/ansible\-collections/community\.general/pull/7352)\)\. -* cargo \- add option locked which allows user to specify install the locked version of dependency instead of latest compatible version \([https\://github\.com/ansible\-collections/community\.general/pull/6134](https\://github\.com/ansible\-collections/community\.general/pull/6134)\)\. -* chroot connection plugin \- add disable\_root\_check option \([https\://github\.com/ansible\-collections/community\.general/pull/7099](https\://github\.com/ansible\-collections/community\.general/pull/7099)\)\. -* cloudflare\_dns \- add CAA record support \([https\://github\.com/ansible\-collections/community\.general/pull/7399](https\://github\.com/ansible\-collections/community\.general/pull/7399)\)\. -* cobbler inventory plugin \- add exclude\_mgmt\_classes and include\_mgmt\_classes options to exclude or include hosts based on management classes \([https\://github\.com/ansible\-collections/community\.general/pull/7184](https\://github\.com/ansible\-collections/community\.general/pull/7184)\)\. -* cobbler inventory plugin \- add inventory\_hostname option to allow using the system name for the inventory hostname \([https\://github\.com/ansible\-collections/community\.general/pull/6502](https\://github\.com/ansible\-collections/community\.general/pull/6502)\)\. -* cobbler inventory plugin \- add want\_ip\_addresses option to collect all interface DNS name to IP address mapping \([https\://github\.com/ansible\-collections/community\.general/pull/6711](https\://github\.com/ansible\-collections/community\.general/pull/6711)\)\. -* cobbler inventory plugin \- add primary IP addess to cobbler\_ipv4\_address and IPv6 address to cobbler\_ipv6\_address host variable \([https\://github\.com/ansible\-collections/community\.general/pull/6711](https\://github\.com/ansible\-collections/community\.general/pull/6711)\)\. -* cobbler inventory plugin \- add warning for systems with empty profiles \([https\://github\.com/ansible\-collections/community\.general/pull/6502](https\://github\.com/ansible\-collections/community\.general/pull/6502)\)\. -* cobbler inventory plugin \- convert Ansible unicode strings to native Python unicode strings before passing user/password to XMLRPC client \([https\://github\.com/ansible\-collections/community\.general/pull/6923](https\://github\.com/ansible\-collections/community\.general/pull/6923)\)\. -* consul\_session \- drops requirement for the python\-consul library to communicate with the Consul API\, instead relying on the existing requests library requirement \([https\://github\.com/ansible\-collections/community\.general/pull/6755](https\://github\.com/ansible\-collections/community\.general/pull/6755)\)\. -* copr \- respawn module to use the system python interpreter when the dnf python module is not available in ansible\_python\_interpreter \([https\://github\.com/ansible\-collections/community\.general/pull/6522](https\://github\.com/ansible\-collections/community\.general/pull/6522)\)\. -* cpanm \- minor refactor when creating the CmdRunner object \([https\://github\.com/ansible\-collections/community\.general/pull/7231](https\://github\.com/ansible\-collections/community\.general/pull/7231)\)\. -* datadog\_monitor \- adds notification\_preset\_name\, renotify\_occurrences and renotify\_statuses parameters \([https\://github\.com/ansible\-collections/community\.general/issues/6521\,https\://github\.com/ansible\-collections/community\.general/issues/5823](https\://github\.com/ansible\-collections/community\.general/issues/6521\,https\://github\.com/ansible\-collections/community\.general/issues/5823)\)\. -* dig lookup plugin \- add TCP option to enable the use of TCP connection during DNS lookup \([https\://github\.com/ansible\-collections/community\.general/pull/7343](https\://github\.com/ansible\-collections/community\.general/pull/7343)\)\. -* ejabberd\_user \- module now using CmdRunner to execute external command \([https\://github\.com/ansible\-collections/community\.general/pull/7075](https\://github\.com/ansible\-collections/community\.general/pull/7075)\)\. -* filesystem \- add uuid parameter for UUID change feature \([https\://github\.com/ansible\-collections/community\.general/pull/6680](https\://github\.com/ansible\-collections/community\.general/pull/6680)\)\. -* gitlab\_group \- add option force\_delete \(default\: false\) which allows delete group even if projects exists in it \([https\://github\.com/ansible\-collections/community\.general/pull/7364](https\://github\.com/ansible\-collections/community\.general/pull/7364)\)\. -* gitlab\_group\_variable \- add support for raw variables suboption \([https\://github\.com/ansible\-collections/community\.general/pull/7132](https\://github\.com/ansible\-collections/community\.general/pull/7132)\)\. -* gitlab\_project\_variable \- add support for raw variables suboption \([https\://github\.com/ansible\-collections/community\.general/pull/7132](https\://github\.com/ansible\-collections/community\.general/pull/7132)\)\. -* gitlab\_project\_variable \- minor refactor removing unnecessary code statements \([https\://github\.com/ansible\-collections/community\.general/pull/6928](https\://github\.com/ansible\-collections/community\.general/pull/6928)\)\. -* gitlab\_runner \- minor refactor removing unnecessary code statements \([https\://github\.com/ansible\-collections/community\.general/pull/6927](https\://github\.com/ansible\-collections/community\.general/pull/6927)\)\. -* htpasswd \- minor code improvements in the module \([https\://github\.com/ansible\-collections/community\.general/pull/6901](https\://github\.com/ansible\-collections/community\.general/pull/6901)\)\. -* htpasswd \- the parameter crypt\_scheme is being renamed as hash\_scheme and added as an alias to it \([https\://github\.com/ansible\-collections/community\.general/pull/6841](https\://github\.com/ansible\-collections/community\.general/pull/6841)\)\. -* icinga2\_host \- the ip option is no longer required\, since Icinga 2 allows for an empty address attribute \([https\://github\.com/ansible\-collections/community\.general/pull/7452](https\://github\.com/ansible\-collections/community\.general/pull/7452)\)\. -* ini\_file \- add ignore\_spaces option \([https\://github\.com/ansible\-collections/community\.general/pull/7273](https\://github\.com/ansible\-collections/community\.general/pull/7273)\)\. -* ini\_file \- add modify\_inactive\_option option \([https\://github\.com/ansible\-collections/community\.general/pull/7401](https\://github\.com/ansible\-collections/community\.general/pull/7401)\)\. -* ipa\_config \- add module parameters to manage FreeIPA user and group objectclasses \([https\://github\.com/ansible\-collections/community\.general/pull/7019](https\://github\.com/ansible\-collections/community\.general/pull/7019)\)\. -* ipa\_config \- adds idp choice to ipauserauthtype parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7051](https\://github\.com/ansible\-collections/community\.general/pull/7051)\)\. -* jenkins\_build \- add new detach option\, which allows the module to exit successfully as long as the build is created \(default functionality is still waiting for the build to end before exiting\) \([https\://github\.com/ansible\-collections/community\.general/pull/7204](https\://github\.com/ansible\-collections/community\.general/pull/7204)\)\. -* jenkins\_build \- add new time\_between\_checks option\, which allows to configure the wait time between requests to the Jenkins server \([https\://github\.com/ansible\-collections/community\.general/pull/7204](https\://github\.com/ansible\-collections/community\.general/pull/7204)\)\. -* keycloak\_authentication \- added provider ID choices\, since Keycloak supports only those two specific ones \([https\://github\.com/ansible\-collections/community\.general/pull/6763](https\://github\.com/ansible\-collections/community\.general/pull/6763)\)\. -* keycloak\_client\_rolemapping \- adds support for subgroups with additional parameter parents \([https\://github\.com/ansible\-collections/community\.general/pull/6687](https\://github\.com/ansible\-collections/community\.general/pull/6687)\)\. -* keycloak\_role \- add composite roles support for realm and client roles \([https\://github\.com/ansible\-collections/community\.general/pull/6469](https\://github\.com/ansible\-collections/community\.general/pull/6469)\)\. -* keyring \- minor refactor removing unnecessary code statements \([https\://github\.com/ansible\-collections/community\.general/pull/6927](https\://github\.com/ansible\-collections/community\.general/pull/6927)\)\. -* ldap\_\* \- add new arguments client\_cert and client\_key to the LDAP modules in order to allow certificate authentication \([https\://github\.com/ansible\-collections/community\.general/pull/6668](https\://github\.com/ansible\-collections/community\.general/pull/6668)\)\. -* ldap\_search \- add a new page\_size option to enable paged searches \([https\://github\.com/ansible\-collections/community\.general/pull/6648](https\://github\.com/ansible\-collections/community\.general/pull/6648)\)\. -* locale\_gen \- module has been refactored to use ModuleHelper and CmdRunner \([https\://github\.com/ansible\-collections/community\.general/pull/6903](https\://github\.com/ansible\-collections/community\.general/pull/6903)\)\. -* locale\_gen \- module now using CmdRunner to execute external commands \([https\://github\.com/ansible\-collections/community\.general/pull/6820](https\://github\.com/ansible\-collections/community\.general/pull/6820)\)\. -* lvg \- add active and inactive values to the state option for active state management feature \([https\://github\.com/ansible\-collections/community\.general/pull/6682](https\://github\.com/ansible\-collections/community\.general/pull/6682)\)\. -* lvg \- add reset\_vg\_uuid\, reset\_pv\_uuid options for UUID reset feature \([https\://github\.com/ansible\-collections/community\.general/pull/6682](https\://github\.com/ansible\-collections/community\.general/pull/6682)\)\. -* lxc connection plugin \- properly handle a change of the remote\_addr option \([https\://github\.com/ansible\-collections/community\.general/pull/7373](https\://github\.com/ansible\-collections/community\.general/pull/7373)\)\. -* lxd connection plugin \- automatically translate remote\_addr from FQDN to \(short\) hostname \([https\://github\.com/ansible\-collections/community\.general/pull/7360](https\://github\.com/ansible\-collections/community\.general/pull/7360)\)\. -* lxd connection plugin \- update error parsing to work with newer messages mentioning instances \([https\://github\.com/ansible\-collections/community\.general/pull/7360](https\://github\.com/ansible\-collections/community\.general/pull/7360)\)\. -* lxd inventory plugin \- add server\_cert option for trust anchor to use for TLS verification of server certificates \([https\://github\.com/ansible\-collections/community\.general/pull/7392](https\://github\.com/ansible\-collections/community\.general/pull/7392)\)\. -* lxd inventory plugin \- add server\_check\_hostname option to disable hostname verification of server certificates \([https\://github\.com/ansible\-collections/community\.general/pull/7392](https\://github\.com/ansible\-collections/community\.general/pull/7392)\)\. -* make \- add new targets parameter allowing multiple targets to be used with make \([https\://github\.com/ansible\-collections/community\.general/pull/6882](https\://github\.com/ansible\-collections/community\.general/pull/6882)\, [https\://github\.com/ansible\-collections/community\.general/issues/4919](https\://github\.com/ansible\-collections/community\.general/issues/4919)\)\. -* make \- allows params to be used without value \([https\://github\.com/ansible\-collections/community\.general/pull/7180](https\://github\.com/ansible\-collections/community\.general/pull/7180)\)\. -* mas \- disable sign\-in check for macOS 12\+ as mas account is non\-functional \([https\://github\.com/ansible\-collections/community\.general/pull/6520](https\://github\.com/ansible\-collections/community\.general/pull/6520)\)\. -* newrelic\_deployment \- add option app\_name\_exact\_match\, which filters results for the exact app\_name provided \([https\://github\.com/ansible\-collections/community\.general/pull/7355](https\://github\.com/ansible\-collections/community\.general/pull/7355)\)\. -* nmap inventory plugin \- now has a use\_arp\_ping option to allow the user to disable the default ARP ping query for a more reliable form \([https\://github\.com/ansible\-collections/community\.general/pull/7119](https\://github\.com/ansible\-collections/community\.general/pull/7119)\)\. -* nmcli \- add support for ipv4\.dns\-options and ipv6\.dns\-options \([https\://github\.com/ansible\-collections/community\.general/pull/6902](https\://github\.com/ansible\-collections/community\.general/pull/6902)\)\. -* nomad\_job\, nomad\_job\_info \- add port parameter \([https\://github\.com/ansible\-collections/community\.general/pull/7412](https\://github\.com/ansible\-collections/community\.general/pull/7412)\)\. -* npm \- minor improvement on parameter validation \([https\://github\.com/ansible\-collections/community\.general/pull/6848](https\://github\.com/ansible\-collections/community\.general/pull/6848)\)\. -* npm \- module now using CmdRunner to execute external commands \([https\://github\.com/ansible\-collections/community\.general/pull/6989](https\://github\.com/ansible\-collections/community\.general/pull/6989)\)\. -* onepassword lookup plugin \- add service account support \([https\://github\.com/ansible\-collections/community\.general/issues/6635](https\://github\.com/ansible\-collections/community\.general/issues/6635)\, [https\://github\.com/ansible\-collections/community\.general/pull/6660](https\://github\.com/ansible\-collections/community\.general/pull/6660)\)\. -* onepassword lookup plugin \- introduce account\_id option which allows specifying which account to use \([https\://github\.com/ansible\-collections/community\.general/pull/7308](https\://github\.com/ansible\-collections/community\.general/pull/7308)\)\. -* onepassword\_raw lookup plugin \- add service account support \([https\://github\.com/ansible\-collections/community\.general/issues/6635](https\://github\.com/ansible\-collections/community\.general/issues/6635)\, [https\://github\.com/ansible\-collections/community\.general/pull/6660](https\://github\.com/ansible\-collections/community\.general/pull/6660)\)\. -* onepassword\_raw lookup plugin \- introduce account\_id option which allows specifying which account to use \([https\://github\.com/ansible\-collections/community\.general/pull/7308](https\://github\.com/ansible\-collections/community\.general/pull/7308)\)\. -* opentelemetry callback plugin \- add span attributes in the span event \([https\://github\.com/ansible\-collections/community\.general/pull/6531](https\://github\.com/ansible\-collections/community\.general/pull/6531)\)\. -* opkg \- add executable parameter allowing to specify the path of the opkg command \([https\://github\.com/ansible\-collections/community\.general/pull/6862](https\://github\.com/ansible\-collections/community\.general/pull/6862)\)\. -* opkg \- remove default value \"\" for parameter force as it causes the same behaviour of not having that parameter \([https\://github\.com/ansible\-collections/community\.general/pull/6513](https\://github\.com/ansible\-collections/community\.general/pull/6513)\)\. -* pagerduty \- adds in option to use v2 API for creating pagerduty incidents \([https\://github\.com/ansible\-collections/community\.general/issues/6151](https\://github\.com/ansible\-collections/community\.general/issues/6151)\) -* parted \- on resize\, use \-\-fix option if available \([https\://github\.com/ansible\-collections/community\.general/pull/7304](https\://github\.com/ansible\-collections/community\.general/pull/7304)\)\. -* pnpm \- set correct version when state is latest or version is not mentioned\. Resolves previous idempotency problem \([https\://github\.com/ansible\-collections/community\.general/pull/7339](https\://github\.com/ansible\-collections/community\.general/pull/7339)\)\. -* pritunl module utils \- ensure validate\_certs parameter is honoured in all methods \([https\://github\.com/ansible\-collections/community\.general/pull/7156](https\://github\.com/ansible\-collections/community\.general/pull/7156)\)\. -* proxmox \- add vmid \(and taskid when possible\) to return values \([https\://github\.com/ansible\-collections/community\.general/pull/7263](https\://github\.com/ansible\-collections/community\.general/pull/7263)\)\. -* proxmox \- support timezone parameter at container creation \([https\://github\.com/ansible\-collections/community\.general/pull/6510](https\://github\.com/ansible\-collections/community\.general/pull/6510)\)\. -* proxmox inventory plugin \- add composite variables support for Proxmox nodes \([https\://github\.com/ansible\-collections/community\.general/issues/6640](https\://github\.com/ansible\-collections/community\.general/issues/6640)\)\. -* proxmox\_kvm \- added support for tpmstate0 parameter to configure TPM \(Trusted Platform Module\) disk\. TPM is required for Windows 11 installations \([https\://github\.com/ansible\-collections/community\.general/pull/6533](https\://github\.com/ansible\-collections/community\.general/pull/6533)\)\. -* proxmox\_kvm \- enabled force restart of VM\, bringing the force parameter functionality in line with what is described in the docs \([https\://github\.com/ansible\-collections/community\.general/pull/6914](https\://github\.com/ansible\-collections/community\.general/pull/6914)\)\. -* proxmox\_kvm \- re\-use timeout module param to forcefully shutdown a virtual machine when state is stopped \([https\://github\.com/ansible\-collections/community\.general/issues/6257](https\://github\.com/ansible\-collections/community\.general/issues/6257)\)\. -* proxmox\_snap \- add retention parameter to delete old snapshots \([https\://github\.com/ansible\-collections/community\.general/pull/6576](https\://github\.com/ansible\-collections/community\.general/pull/6576)\)\. -* proxmox\_vm\_info \- node parameter is no longer required\. Information can be obtained for the whole cluster \([https\://github\.com/ansible\-collections/community\.general/pull/6976](https\://github\.com/ansible\-collections/community\.general/pull/6976)\)\. -* proxmox\_vm\_info \- non\-existing provided by name/vmid VM would return empty results instead of failing \([https\://github\.com/ansible\-collections/community\.general/pull/7049](https\://github\.com/ansible\-collections/community\.general/pull/7049)\)\. -* pubnub\_blocks \- minor refactor removing unnecessary code statements \([https\://github\.com/ansible\-collections/community\.general/pull/6928](https\://github\.com/ansible\-collections/community\.general/pull/6928)\)\. -* random\_string \- added new ignore\_similar\_chars and similar\_chars option to ignore certain chars \([https\://github\.com/ansible\-collections/community\.general/pull/7242](https\://github\.com/ansible\-collections/community\.general/pull/7242)\)\. -* redfish\_command \- add MultipartHTTPPushUpdate command \([https\://github\.com/ansible\-collections/community\.general/issues/6471](https\://github\.com/ansible\-collections/community\.general/issues/6471)\, [https\://github\.com/ansible\-collections/community\.general/pull/6612](https\://github\.com/ansible\-collections/community\.general/pull/6612)\)\. -* redfish\_command \- add account\_types and oem\_account\_types as optional inputs to AddUser \([https\://github\.com/ansible\-collections/community\.general/issues/6823](https\://github\.com/ansible\-collections/community\.general/issues/6823)\, [https\://github\.com/ansible\-collections/community\.general/pull/6871](https\://github\.com/ansible\-collections/community\.general/pull/6871)\)\. -* redfish\_command \- add new option update\_oem\_params for the MultipartHTTPPushUpdate command \([https\://github\.com/ansible\-collections/community\.general/issues/7331](https\://github\.com/ansible\-collections/community\.general/issues/7331)\)\. -* redfish\_config \- add CreateVolume command to allow creation of volumes on servers \([https\://github\.com/ansible\-collections/community\.general/pull/6813](https\://github\.com/ansible\-collections/community\.general/pull/6813)\)\. -* redfish\_config \- add DeleteAllVolumes command to allow deletion of all volumes on servers \([https\://github\.com/ansible\-collections/community\.general/pull/6814](https\://github\.com/ansible\-collections/community\.general/pull/6814)\)\. -* redfish\_config \- adding SetSecureBoot command \([https\://github\.com/ansible\-collections/community\.general/pull/7129](https\://github\.com/ansible\-collections/community\.general/pull/7129)\)\. -* redfish\_info \- add AccountTypes and OEMAccountTypes to the output of ListUsers \([https\://github\.com/ansible\-collections/community\.general/issues/6823](https\://github\.com/ansible\-collections/community\.general/issues/6823)\, [https\://github\.com/ansible\-collections/community\.general/pull/6871](https\://github\.com/ansible\-collections/community\.general/pull/6871)\)\. -* redfish\_info \- add support for GetBiosRegistries command \([https\://github\.com/ansible\-collections/community\.general/pull/7144](https\://github\.com/ansible\-collections/community\.general/pull/7144)\)\. -* redfish\_info \- adds LinkStatus to NIC inventory \([https\://github\.com/ansible\-collections/community\.general/pull/7318](https\://github\.com/ansible\-collections/community\.general/pull/7318)\)\. -* redfish\_info \- adds ProcessorArchitecture to CPU inventory \([https\://github\.com/ansible\-collections/community\.general/pull/6864](https\://github\.com/ansible\-collections/community\.general/pull/6864)\)\. -* redfish\_info \- fix for GetVolumeInventory\, Controller name was getting populated incorrectly and duplicates were seen in the volumes retrieved \([https\://github\.com/ansible\-collections/community\.general/pull/6719](https\://github\.com/ansible\-collections/community\.general/pull/6719)\)\. -* redfish\_info \- report Id in the output of GetManagerInventory \([https\://github\.com/ansible\-collections/community\.general/pull/7140](https\://github\.com/ansible\-collections/community\.general/pull/7140)\)\. -* redfish\_utils \- use Controllers key in redfish data to obtain Storage controllers properties \([https\://github\.com/ansible\-collections/community\.general/pull/7081](https\://github\.com/ansible\-collections/community\.general/pull/7081)\)\. -* redfish\_utils module utils \- add support for PowerCycle reset type for redfish\_command responses feature \([https\://github\.com/ansible\-collections/community\.general/issues/7083](https\://github\.com/ansible\-collections/community\.general/issues/7083)\)\. -* redfish\_utils module utils \- add support for following \@odata\.nextLink pagination in software\_inventory responses feature \([https\://github\.com/ansible\-collections/community\.general/pull/7020](https\://github\.com/ansible\-collections/community\.general/pull/7020)\)\. -* redfish\_utils module utils \- support Volumes in response for GetDiskInventory \([https\://github\.com/ansible\-collections/community\.general/pull/6819](https\://github\.com/ansible\-collections/community\.general/pull/6819)\)\. -* redhat\_subscription \- the internal RegistrationBase class was folded - into the other internal Rhsm class\, as the separation had no purpose - anymore - \([https\://github\.com/ansible\-collections/community\.general/pull/6658](https\://github\.com/ansible\-collections/community\.general/pull/6658)\)\. -* redis\_info \- refactor the redis\_info module to use the redis module\_utils enabling to pass TLS parameters to the Redis client \([https\://github\.com/ansible\-collections/community\.general/pull/7267](https\://github\.com/ansible\-collections/community\.general/pull/7267)\)\. -* rhsm\_release \- improve/harden the way subscription\-manager is run\; - no behaviour change is expected - \([https\://github\.com/ansible\-collections/community\.general/pull/6669](https\://github\.com/ansible\-collections/community\.general/pull/6669)\)\. -* rhsm\_repository \- the interaction with subscription\-manager was - refactored by grouping things together\, removing unused bits\, and hardening - the way it is run\; also\, the parsing of subscription\-manager repos \-\-list - was improved and made slightly faster\; no behaviour change is expected - \([https\://github\.com/ansible\-collections/community\.general/pull/6783](https\://github\.com/ansible\-collections/community\.general/pull/6783)\, - [https\://github\.com/ansible\-collections/community\.general/pull/6837](https\://github\.com/ansible\-collections/community\.general/pull/6837)\)\. -* scaleway\_security\_group\_rule \- minor refactor removing unnecessary code statements \([https\://github\.com/ansible\-collections/community\.general/pull/6928](https\://github\.com/ansible\-collections/community\.general/pull/6928)\)\. -* shutdown \- use shutdown \-p \.\.\. with FreeBSD to halt and power off machine \([https\://github\.com/ansible\-collections/community\.general/pull/7102](https\://github\.com/ansible\-collections/community\.general/pull/7102)\)\. -* snap \- add option dangerous to the module\, that will map into the command line argument \-\-dangerous\, allowing unsigned snap files to be installed \([https\://github\.com/ansible\-collections/community\.general/pull/6908](https\://github\.com/ansible\-collections/community\.general/pull/6908)\, [https\://github\.com/ansible\-collections/community\.general/issues/5715](https\://github\.com/ansible\-collections/community\.general/issues/5715)\)\. -* snap \- module is now aware of channel when deciding whether to install or refresh the snap \([https\://github\.com/ansible\-collections/community\.general/pull/6435](https\://github\.com/ansible\-collections/community\.general/pull/6435)\, [https\://github\.com/ansible\-collections/community\.general/issues/1606](https\://github\.com/ansible\-collections/community\.general/issues/1606)\)\. -* sorcery \- add grimoire \(repository\) management support \([https\://github\.com/ansible\-collections/community\.general/pull/7012](https\://github\.com/ansible\-collections/community\.general/pull/7012)\)\. -* sorcery \- minor refactor \([https\://github\.com/ansible\-collections/community\.general/pull/6525](https\://github\.com/ansible\-collections/community\.general/pull/6525)\)\. -* supervisorctl \- allow to stop matching running processes before removing them with stop\_before\_removing\=true \([https\://github\.com/ansible\-collections/community\.general/pull/7284](https\://github\.com/ansible\-collections/community\.general/pull/7284)\)\. -* tss lookup plugin \- allow to fetch secret IDs which are in a folder based on folder ID\. Previously\, we could not fetch secrets based on folder ID but now use fetch\_secret\_ids\_from\_folder option to indicate to fetch secret IDs based on folder ID \([https\://github\.com/ansible\-collections/community\.general/issues/6223](https\://github\.com/ansible\-collections/community\.general/issues/6223)\)\. -* tss lookup plugin \- allow to fetch secret by path\. Previously\, we could not fetch secret by path but now use secret\_path option to indicate to fetch secret by secret path \([https\://github\.com/ansible\-collections/community\.general/pull/6881](https\://github\.com/ansible\-collections/community\.general/pull/6881)\)\. -* unixy callback plugin \- add support for check\_mode\_markers option \([https\://github\.com/ansible\-collections/community\.general/pull/7179](https\://github\.com/ansible\-collections/community\.general/pull/7179)\)\. -* vardict module utils \- added convenience methods to VarDict \([https\://github\.com/ansible\-collections/community\.general/pull/6647](https\://github\.com/ansible\-collections/community\.general/pull/6647)\)\. -* xenserver\_guest\_info \- minor refactor removing unnecessary code statements \([https\://github\.com/ansible\-collections/community\.general/pull/6928](https\://github\.com/ansible\-collections/community\.general/pull/6928)\)\. -* xenserver\_guest\_powerstate \- minor refactor removing unnecessary code statements \([https\://github\.com/ansible\-collections/community\.general/pull/6928](https\://github\.com/ansible\-collections/community\.general/pull/6928)\)\. -* yum\_versionlock \- add support to pin specific package versions instead of only the package itself \([https\://github\.com/ansible\-collections/community\.general/pull/6861](https\://github\.com/ansible\-collections/community\.general/pull/6861)\, [https\://github\.com/ansible\-collections/community\.general/issues/4470](https\://github\.com/ansible\-collections/community\.general/issues/4470)\)\. - - -#### community\.grafana - -* Add grafana\_organization\_user module -* Bump version of Python used in tests to 3\.10 -* Enable datasource option time\_interval for prometheus -* Fix documentation url for Ansible doc website -* Now testing against Grafana 9\.5\.13\, 8\.5\.27\, 10\.2\.0 - - -#### community\.libvirt - -* virt \- add mutate\_flags parameter to enable XML mutation \(add UUID\, MAC addresses from existing domain\) \([https\://github\.com/ansible\-collections/community\.libvirt/pull/142/](https\://github\.com/ansible\-collections/community\.libvirt/pull/142/)\)\. -* virt \- support \-\-diff for define command \([https\://github\.com/ansible\-collections/community\.libvirt/pull/142/](https\://github\.com/ansible\-collections/community\.libvirt/pull/142/)\)\. - - -#### community\.mysql - -* mysql\_info \- add filter users\_info \([https\://github\.com/ansible\-collections/community\.mysql/pull/580](https\://github\.com/ansible\-collections/community\.mysql/pull/580)\)\. -* mysql\_role \- add column\_case\_sensitive option to prevent field names from being uppercased \([https\://github\.com/ansible\-collections/community\.mysql/pull/569](https\://github\.com/ansible\-collections/community\.mysql/pull/569)\)\. -* mysql\_user \- add column\_case\_sensitive option to prevent field names from being uppercased \([https\://github\.com/ansible\-collections/community\.mysql/pull/569](https\://github\.com/ansible\-collections/community\.mysql/pull/569)\)\. - - -#### community\.postgresql - -* Collection core functions \- use get\_server\_version in all modules \([https\://github\.com/ansible\-collections/community\.postgresql/pull/518](https\://github\.com/ansible\-collections/community\.postgresql/pull/518)\)\.\" -* Collection core functions \- use common cursor arguments in all modules \([https\://github\.com/ansible\-collections/community\.postgresql/pull/522](https\://github\.com/ansible\-collections/community\.postgresql/pull/522)\)\.\" -* postgres modules \- added support for Psycopg 3 library \([https\://github\.com/ansible\-collections/community\.postgresql/pull/517](https\://github\.com/ansible\-collections/community\.postgresql/pull/517)\)\. -* postgresql\_ext \- added idempotence always both in standard and in check mode \([https\://github\.com/ansible\-collections/community\.postgresql/pull/545](https\://github\.com/ansible\-collections/community\.postgresql/pull/545)\)\. -* postgresql\_ext \- added idempotence when version\=latest \([https\://github\.com/ansible\-collections/community\.postgresql/pull/504](https\://github\.com/ansible\-collections/community\.postgresql/pull/504)\)\. -* postgresql\_ext \- added prev\_version and version return values \([https\://github\.com/ansible\-collections/community\.postgresql/pull/545](https\://github\.com/ansible\-collections/community\.postgresql/pull/545)\)\. -* postgresql\_ext \- added queries in module output also in check mode \([https\://github\.com/ansible\-collections/community\.postgresql/pull/545](https\://github\.com/ansible\-collections/community\.postgresql/pull/545)\)\. -* postgresql\_ext \- improved error messages \([https\://github\.com/ansible\-collections/community\.postgresql/pull/545](https\://github\.com/ansible\-collections/community\.postgresql/pull/545)\)\. -* postgresql\_owner \- added support at new object types \([https\://github\.com/ansible\-collections/community\.postgresql/pull/555](https\://github\.com/ansible\-collections/community\.postgresql/pull/555)\)\. -* postgresql\_privs \- added idempotence when roles\=PUBLIC \([https\://github\.com/ansible\-collections/community\.postgresql/pull/502](https\://github\.com/ansible\-collections/community\.postgresql/pull/502)\)\. -* postgresql\_privs \- added parameters privileges support for PostgreSQL 15 or higher \([https\://github\.com/ansible\-collections/community\.postgresql/issues/481](https\://github\.com/ansible\-collections/community\.postgresql/issues/481)\)\. -* postgresql\_privs \- added support for implicit roles CURRENT\_ROLE\, CURRENT\_USER\, and SESSION\_USER \([https\://github\.com/ansible\-collections/community\.postgresql/pull/502](https\://github\.com/ansible\-collections/community\.postgresql/pull/502)\)\. -* postgresql\_tablespace \- added idempotence when dropping a non\-existing tablespace \([https\://github\.com/ansible\-collections/community\.postgresql/pull/554](https\://github\.com/ansible\-collections/community\.postgresql/pull/554)\)\. - - -#### community\.routeros - -* api\_info \- add new include\_read\_only option to select behavior for read\-only values\. By default these are not returned \([https\://github\.com/ansible\-collections/community\.routeros/pull/213](https\://github\.com/ansible\-collections/community\.routeros/pull/213)\)\. -* api\_info\, api\_modify \- add path caps\-man channel and enable path caps\-man manager interface \([https\://github\.com/ansible\-collections/community\.routeros/issues/193](https\://github\.com/ansible\-collections/community\.routeros/issues/193)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/194](https\://github\.com/ansible\-collections/community\.routeros/pull/194)\)\. -* api\_info\, api\_modify \- add path ip traffic\-flow target \([https\://github\.com/ansible\-collections/community\.routeros/issues/191](https\://github\.com/ansible\-collections/community\.routeros/issues/191)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/192](https\://github\.com/ansible\-collections/community\.routeros/pull/192)\)\. -* api\_info\, api\_modify \- add support for address\-list and match\-subdomain introduced by RouterOS 7\.7 in the ip dns static path \([https\://github\.com/ansible\-collections/community\.routeros/pull/197](https\://github\.com/ansible\-collections/community\.routeros/pull/197)\)\. -* api\_info\, api\_modify \- add support for user\, time and gmt\-offset under the system clock path \([https\://github\.com/ansible\-collections/community\.routeros/pull/210](https\://github\.com/ansible\-collections/community\.routeros/pull/210)\)\. -* api\_info\, api\_modify \- add support for the interface ppp\-client path \([https\://github\.com/ansible\-collections/community\.routeros/pull/199](https\://github\.com/ansible\-collections/community\.routeros/pull/199)\)\. -* api\_info\, api\_modify \- add support for the interface wireless path \([https\://github\.com/ansible\-collections/community\.routeros/pull/195](https\://github\.com/ansible\-collections/community\.routeros/pull/195)\)\. -* api\_info\, api\_modify \- add support for the iot modbus path \([https\://github\.com/ansible\-collections/community\.routeros/pull/205](https\://github\.com/ansible\-collections/community\.routeros/pull/205)\)\. -* api\_info\, api\_modify \- add support for the ip dhcp\-server option and ip dhcp\-server option sets paths \([https\://github\.com/ansible\-collections/community\.routeros/pull/223](https\://github\.com/ansible\-collections/community\.routeros/pull/223)\)\. -* api\_info\, api\_modify \- add support for the ip upnp interfaces\, tool graphing interface\, tool graphing resource paths \([https\://github\.com/ansible\-collections/community\.routeros/pull/227](https\://github\.com/ansible\-collections/community\.routeros/pull/227)\)\. -* api\_info\, api\_modify \- add support for the ipv6 firewall nat path \([https\://github\.com/ansible\-collections/community\.routeros/pull/204](https\://github\.com/ansible\-collections/community\.routeros/pull/204)\)\. -* api\_info\, api\_modify \- add support for the mode property in ip neighbor discovery\-settings introduced in RouterOS 7\.7 \([https\://github\.com/ansible\-collections/community\.routeros/pull/198](https\://github\.com/ansible\-collections/community\.routeros/pull/198)\)\. -* api\_info\, api\_modify \- add support for the port remote\-access path \([https\://github\.com/ansible\-collections/community\.routeros/pull/224](https\://github\.com/ansible\-collections/community\.routeros/pull/224)\)\. -* api\_info\, api\_modify \- add support for the routing filter rule and routing filter select\-rule paths \([https\://github\.com/ansible\-collections/community\.routeros/pull/200](https\://github\.com/ansible\-collections/community\.routeros/pull/200)\)\. -* api\_info\, api\_modify \- add support for the routing table path in RouterOS 7 \([https\://github\.com/ansible\-collections/community\.routeros/pull/215](https\://github\.com/ansible\-collections/community\.routeros/pull/215)\)\. -* api\_info\, api\_modify \- add support for the tool netwatch path in RouterOS 7 \([https\://github\.com/ansible\-collections/community\.routeros/pull/216](https\://github\.com/ansible\-collections/community\.routeros/pull/216)\)\. -* api\_info\, api\_modify \- add support for the user settings path \([https\://github\.com/ansible\-collections/community\.routeros/pull/201](https\://github\.com/ansible\-collections/community\.routeros/pull/201)\)\. -* api\_info\, api\_modify \- add support for the user path \([https\://github\.com/ansible\-collections/community\.routeros/pull/211](https\://github\.com/ansible\-collections/community\.routeros/pull/211)\)\. -* api\_info\, api\_modify \- finalize fields for the interface wireless security\-profiles path and enable it \([https\://github\.com/ansible\-collections/community\.routeros/pull/203](https\://github\.com/ansible\-collections/community\.routeros/pull/203)\)\. -* api\_info\, api\_modify \- finalize fields for the ppp profile path and enable it \([https\://github\.com/ansible\-collections/community\.routeros/pull/217](https\://github\.com/ansible\-collections/community\.routeros/pull/217)\)\. -* api\_modify \- add new handle\_read\_only and handle\_write\_only options to handle the module\'s behavior for read\-only and write\-only fields \([https\://github\.com/ansible\-collections/community\.routeros/pull/213](https\://github\.com/ansible\-collections/community\.routeros/pull/213)\)\. -* api\_modify\, api\_info \- support API paths routing id\, routing bgp connection \([https\://github\.com/ansible\-collections/community\.routeros/pull/220](https\://github\.com/ansible\-collections/community\.routeros/pull/220)\)\. - - -#### community\.vmware - -* Removed module / plugin documentation RST files from the repository \([https\://github\.com/ansible\-collections/community\.vmware/pull/1897](https\://github\.com/ansible\-collections/community\.vmware/pull/1897)\)\. -* Using semantic markup in documentation \([https\://github\.com/ansible\-collections/community\.vmware/issues/1771](https\://github\.com/ansible\-collections/community\.vmware/issues/1771)\)\. -* add moid property in the return value for the module\([https\://github\.com/ansible\-collections/community\.vmware/pull/1855](https\://github\.com/ansible\-collections/community\.vmware/pull/1855)\)\. -* add new snapshot\_id option to the vmware\_guest\_snapshot module\([https\://github\.com/ansible\-collections/community\.vmware/pull/1847](https\://github\.com/ansible\-collections/community\.vmware/pull/1847)\)\. -* autoselect\_datastore \- add support to also look at NFS mounted filesystems \(previously was just VMFS\) -* vmware\_cluster\_drs\_recommendations \- Add the Module to apply the drs recommendations \([https\://github\.com/ansible\-collections/community\.vmware/pull/1736](https\://github\.com/ansible\-collections/community\.vmware/pull/1736)\) -* vmware\_deploy\_ovf \- New parameter enable\_hidden\_properties to force OVF properties marked as ovf\:userConfigurable\=false to become user configurable \([https\://github\.com/ansible\-collections/community\.vmware/issues/802](https\://github\.com/ansible\-collections/community\.vmware/issues/802)\)\. -* vmware\_dvs\_portgroup\_info \- add moid property in the return value for the module \([https\://github\.com/ansible\-collections/community\.vmware/issues/1849](https\://github\.com/ansible\-collections/community\.vmware/issues/1849)\)\. -* vmware\_guest \- add support for configuring vMotion and FT encryption \([https\://github\.com/ansible\-collections/community\.vmware/issues/1069](https\://github\.com/ansible\-collections/community\.vmware/issues/1069)\) -* vmware\_guest\_serial\_port \- add support for proxyURI parameter to enable use of a virtual serial port concentrator \([https\://github\.com/ansible\-collections/community\.vmware/issues/1742](https\://github\.com/ansible\-collections/community\.vmware/issues/1742)\) -* vmware\_guest\_snapshot \- add new snapshot\_id option \([https\://github\.com/ansible\-collections/community\.vmware/pull/1847](https\://github\.com/ansible\-collections/community\.vmware/pull/1847)\)\. -* vmware\_host\_datastore \- added new datastore type \'vvol\' for enabling creation/deletion of vVols datastores -* vmware\_host\_datastore \- added new parameter resignature for supporting resignaturing an existing VMFS datastore on an imported/cloned LUN\. -* vmware\_host\_snmp module now can configure SNMP agent on set of hosts \(list in esxi\_hostname parameter or as cluster in cluster\_name parameter\)\. The ability to configure the host directly remains \([https\://github\.com/ansible\-collections/community\.vmware/issues/1799](https\://github\.com/ansible\-collections/community\.vmware/issues/1799)\)\. -* vmware\_vm\_info \- Add instance\_uuid to the result \([https\://github\.com/ansible\-collections/community\.vmware/issues/1805](https\://github\.com/ansible\-collections/community\.vmware/issues/1805)\) - - -#### community\.windows - -* win\_dns\_record \- Added zone\_scope option to manage a record in a specific zone scope - - -#### community\.zabbix - -* Multiple Roles \- Replaced depricated \'include\' statements with \'include\_tasks\' -* Update action\_groups variable in runtime\.yml -* all roles \- Added support for Debian 12 \(Bookworm\) -* all roles \- Delete gpg ids variable\. -* all roles \- Modified to allow a non\-root user to run the role\. -* all roles \- Updated testing to account for the correct version of Zabbix -* zabbix\_hostmacro module \- Add description property for Host macro creation/update\. Allow to set/update description of Zabbix host macros\. -* zabbix\_proxy \- Added installation of PyMySQL pip package -* zabbix\_proxy \- Modified installation of Centos 7 MySQL client -* zabbix\_proxy \- Standardized MySQL client installed on Debian and Ubuntu -* zabbix\_regexp module added -* zabbix\_settings module added -* zabbix\_token module added - - -#### containers\.podman - -* Update docs -* podman\_container \- Add support for health\-on\-failure action -* podman\_image \-Add target support for podman build image -* podman\_play \- Add build and context\_dir option to podman\_play -* podman\_pod \- Add options for resource limits to podman\_pod - - -#### dellemc\.enterprise\_sonic - -* galaxy\_yml \- Enable installation of Ansible Netcomon versions after 5\.0\.0 and update the enterprise\_sonic release version \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/270](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/270)\)\. -* module\_utils \- Change the location for importing remove\_empties from the obsolete Netcommon location to the offically required Ansible library location to fix sanity errors \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/172](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/172)\)\. -* sonic\_aaa \- Add replaced and overridden states support for AAA resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/237](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/237)\)\. -* sonic\_aaa \- Add unit tests for AAA resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/198](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/198)\)\. -* sonic\_aaa \- Revert breaking changes for AAA nodule \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/269](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/269)\)\. -* sonic\_api \- Add unit tests for api resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/218](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/218)\)\. -* sonic\_bfd\, sonic\_copp \- Update replaced methods \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/254](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/254)\)\. -* sonic\_bgp \- Add rt\_delay attribute to module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/244](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/244)\)\. -* sonic\_bgp \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/240](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/240)\)\. -* sonic\_bgp \- Add unit tests for BGP resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/182](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/182)\)\. -* sonic\_bgp\_af \- Add several attributes to support configuration of route distinguisher and route target \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/141](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/141)\)\. -* sonic\_bgp\_af \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/246](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/246)\)\. -* sonic\_bgp\_af \- Add unit tests for BGP AF resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/183](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/183)\)\. -* sonic\_bgp\_af \- Modify BGP AF resource module unit tests to adjust for changes in the resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/191](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/191)\)\. -* sonic\_bgp\_as\_paths \- Add unit tests for BGP AS paths resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/184](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/184)\)\. -* sonic\_bgp\_communities \- Add unit tests for BGP communities resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/185](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/185)\)\. -* sonic\_bgp\_ext\_communities \- Add unit tests for BGP ext communities resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/186](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/186)\)\. -* sonic\_bgp\_neighbors \- Add unit tests for BGP neighbors resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/187](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/187)\)\. -* sonic\_bgp\_neighbors \- Enhance unit tests for BGP Neighbors resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/245](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/245)\)\. -* sonic\_bgp\_neighbors\_af \- Add unit tests for BGP neighbors AF resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/188](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/188)\)\. -* sonic\_command \- Add unit tests for command resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/219](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/219)\)\. -* sonic\_config \- Add unit tests for config resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/220](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/220)\)\. -* sonic\_dhcp\_relay \- Add a common unit tests module and unit tests for dhcp relay module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/148](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/148)\)\. -* sonic\_dhcp\_relay \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/249](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/249)\)\. -* sonic\_facts \- Add unit tests for facts resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/222](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/222)\)\. -* sonic\_interfaces \- Add speed\, auto\-negotiate\, advertised\-speed and FEC to interface resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/128](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/128)\)\. -* sonic\_interfaces \- Add unit tests for interfaces resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/197](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/197)\)\. -* sonic\_ip\_neighbor \- Add unit tests for IP neighbor resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/225](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/225)\)\. -* sonic\_ip\_neighbor \- Change the replaced function in ip\_neighbor resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/253](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/253)\)\. -* sonic\_l2\_interfaces \- Add support for parsing configuration containing the OC Yang vlan range syntax \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/124](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/124)\)\. -* sonic\_l2\_interfaces \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/221](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/221)\)\. -* sonic\_l2\_interfaces \- Add support for specifying vlan trunk ranges in Ansible playbooks \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/149](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/149)\)\. -* sonic\_l2\_interfaces \- Add unit tests for l2\_interfaces resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/200](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/200)\)\. -* sonic\_l3\_interfaces \- Add unit tests for l3\_interfaces resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/202](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/202)\)\. -* sonic\_lag\_interface \- Add replaced and overridden states support for LAG interface resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/196](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/196)\)\. -* sonic\_lag\_interfaces \- Add unit tests for lag\_interfaces resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/203](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/203)\)\. -* sonic\_logging \- Add replaced and overridden states support for logging resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/150](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/150)\)\. -* sonic\_logging \- Add unit tests for logging resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/226](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/226)\)\. -* sonic\_logging \- Change logging get facts for source\_interface naming \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/258](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/258)\)\. -* sonic\_mclag \- Add delay\_restore\, gateway\_mac\, and peer\_gateway attributes to module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/145](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/145)\)\. -* sonic\_ntp \- Add prefer attribute to NTP resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/118](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/118)\)\. -* sonic\_ntp \- Add replaced and overridden states support for NTP resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/151](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/151)\)\. -* sonic\_ntp \- Add unit tests for NTP resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/207](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/207)\)\. -* sonic\_ntp \- Change NTP get facts to get default parameters \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/106](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/106)\)\. -* sonic\_ntp \- Change NTP key values in NTP regression test script \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/107](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/107)\)\. -* sonic\_ntp \- Change NTP module name \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/113](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/113)\)\. -* sonic\_ntp \- Change NTP module names in NTP regression test script \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/114](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/114)\)\. -* sonic\_ntp \- Change NTP resource module to make minpoll and maxpoll be configured together \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/129](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/129)\)\. -* sonic\_port\_breakout \- Add unit tests for port breakout resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/229](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/229)\)\. -* sonic\_port\_group \- Add replaced and overridden states support for port group resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/227](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/227)\)\. -* sonic\_port\_group \- Add unit tests for port group resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/228](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/228)\)\. -* sonic\_prefix\_lists \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/255](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/255)\)\. -* sonic\_prefix\_lists \- Add unit tests for prefix lists resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/209](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/209)\)\. -* sonic\_radius\_server \- Add replaced and overridden states support for RADIUS server resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/239](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/239)\)\. -* sonic\_radius\_server \- Add unit tests for RADIUS server resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/210](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/210)\)\. -* sonic\_static\_routes \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/236](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/236)\)\. -* sonic\_static\_routes \- Add unit tests for static routes resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/212](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/212)\)\. -* sonic\_system \- Add replaced and overridden states support for system resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/159](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/159)\)\. -* sonic\_system \- Add unit tests for system resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/223](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/223)\)\. -* sonic\_tacacs\_server \- Add replaced and overridden states support for TACACS server resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/235](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/235)\)\. -* sonic\_tacacs\_server \- Add unit tests for TACACS server resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/208](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/208)\)\. -* sonic\_users \- Add replaced and overridden states support for users resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/242](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/242)\)\. -* sonic\_users \- Add unit tests for users resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/213](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/213)\)\. -* sonic\_vlans \- Add replaced and overridden states support for VLAN resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/217](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/217)\)\. -* sonic\_vlans \- Add unit tests for Vlans resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/214](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/214)\)\. -* sonic\_vrfs \- Add replaced and overridden states support for VRF resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/156](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/156)\)\. -* sonic\_vrfs \- Add unit tests for VRFS resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/216](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/216)\)\. -* sonic\_vxlans \- Add support for replaced and overridden states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/247](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/247)\)\. -* sonic\_vxlans \- Add unit tests for VxLans resource module \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/215](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/215)\)\. - - -#### dellemc\.openmanage - -* All the module documentation and examples are updated to use true or false for Boolean values\. -* Module idrac\_user is enhanced to configure custom privileges for an user\. -* Module ome\_application\_certificate is enhanced to support subject alternative names\. -* Module ome\_diagnostics is enhanced to update changed flag status in response\. -* Module ome\_discovery is enhanced to add detailed job information of each IP discovered\. -* Module ome\_firmware\_baseline is enhanced to support the option to select only components with no reboot required\. -* Module ome\_firmware\_catalog is enhanced to support IPv6 address\. -* Module ome\_firmware is enhanced to support reboot type options\. -* Module ome\_job\_info is enhanced to return last execution details and execution histories\. -* Module redfish\_firmware is enhanced to support IPv6 address\. -* Module redfish\_storage\_volume is enhanced to support RAID6 and RAID60\. -* Role idrac\_os\_deployment is enhanced to remove the auto installation of required libraries and to support custom ISO and kickstart file as input\. -* Updated the idrac\_gather\_facts role to use jinja template filters\. - - -#### dellemc\.powerflex - -* Added Ansible role to support creation and deletion of protection domain\, storage pool and fault set\. -* Added Ansible role to support installation and uninstallation of Active MQ\. -* Added Ansible role to support installation and uninstallation of Gateway\. -* Added Ansible role to support installation and uninstallation of LIA\. -* Added Ansible role to support installation and uninstallation of MDM\. -* Added Ansible role to support installation and uninstallation of SDC\. -* Added Ansible role to support installation and uninstallation of SDR\. -* Added Ansible role to support installation and uninstallation of SDS\. -* Added Ansible role to support installation and uninstallation of TB\. -* Added Ansible role to support installation and uninstallation of Web UI\. -* Added sample playbooks for the modules\. -* Added support for PowerFlex Denver version\(4\.5\.x\) -* Added support for SDC installation on ESXi\, Rocky Linux and Windows OS\. -* Device module is enhanced to support force addition of device to the SDS\. -* Info module is enhanced to list statistics in snapshot policies\. -* Replication consistency group module is enhanced to support failover\, restore\, reverse\, switchover\, and sync operations\. -* SDC module is enhanced to configure performance profile and to remove SDC\. -* Updated modules to adhere with ansible community guidelines\. - - -#### dellemc\.unity - -* Added replication session module to get details\, pause\, resume\, sync\, failover\, failback and delete replication sessions\. -* Added support for Unity XT SeaHawk 5\.3 -* Documentation updates for boolean values based on ansible community guidelines\. -* Patch update to fix import errors in utils file\. - - -#### f5networks\.f5\_modules - -* bigip\_command \- Added note to give appropriate timeout value for long running commands -* bigip\_policy\_rule \- added six more options for ssl\_extension condition - - -#### fortinet\.fortimanager - -* Corrected the behavior of module fmgr\_pkg\_firewall\_consolidated\_policy\_sectionvalue and fmgr\_pkg\_firewall\_securitypolicy\_sectionvalue\. -* Improve documentation\. -* Some arguments can support both list or string format input now\. -* Support newest versions for FortiManager v6\.2 \~ v7\.4 - - -#### google\.cloud - -* Add DataPlane V2 Support\. -* Add auth support for GCP access tokens \(\#574\)\. -* Add support for ip\_allocation\_policy\-\>stack\_type\. - - -#### grafana\.grafana - -* Ability to configure date format in grafana server role by \@RomainMou -* Add Grafana Agent Version and CPU Arch to Downloaded ZIP in Grafana Agent Role -* Add check for Curl and failure step if Agent Version is not retrieved -* Add overrides\.conf with CAP\_NET\_BIND\_SERVICE for grafana\-server unit -* Allow alert resource provisioning in Grafana Role -* Avoid using shell for fetching latest version in Grafana Agent Role by \@gardar -* Bump cryptography from 39\.0\.2 to 41\.0\.3 -* Bump cryptography from 41\.0\.3 to 41\.0\.4 -* Bump semver from 5\.7\.1 to 5\.7\.2 -* Bump word\-wrap from 1\.2\.3 to 1\.2\.5 -* Create local dashboard directory in check mode -* Create missing notification directory in Grafana Role -* Datasource test updates and minor fixes -* Fix Deleting datasources -* Fix Grafana Dashboard Import for Grafana Role -* Fix alert\_notification\_policy failing on fresh instance -* Fix for invalid yaml with datasources list enclosed in quotes by \@elkozmon -* Fix grafana dashboard import in Grafana Role -* Make grafana\_agent Idempotent -* Making Deleting folders idempotent -* Move \_grafana\_agent\_base\_download\_url from /vars to /defaults in Grafana Agent Role -* Provisioning errors in YAML -* Remove agent installation custom check by \@VLZZZ -* Remove check\_mode from create local directory task in Grafana Role -* Remove dependency on local\-fs\.target from Grafana Agent role -* Remove explicit user creation check by \@v\-zhuravlev -* Remove trailing slash automatically from grafana\_url -* Update CI Testing -* Update Cloud Stack Module failures -* Update Download tasks in Grafana Agent Role -* Use \'ansible\_system\' env variable to detect os typ in Grafana Agent Role -* Use new standard to configure Grafana APT source for Grafana Role -* YAML Fixes -* hange grafana Agent Wal and Positions Directory in Grafana Agent Role -* indentation and Lint fixes to modules - - -#### hetzner\.hcloud - -* Bundle hcloud python dependency inside the collection\. -* Use the collection version in the hcloud user\-agent instead of the ansible\-core version\. -* hcloud\_datacenter\_info \- Add server\_types field -* hcloud\_floating\_ip\_info \- Allow querying floating ip by name\. -* hcloud\_iso\_info \- Add deprecation field -* hcloud\_iso\_info Create hcloud\_iso\_info module -* hcloud\_load\_balancer\_info \- Add targets health status field\. -* hcloud\_load\_balancer\_network \- Allow selecting a load\_balancer or network using its ID\. -* hcloud\_load\_balancer\_service \- Allow selecting a load\_balancer using its ID\. -* hcloud\_load\_balancer\_target \- Allow selecting a load\_balancer or server using its ID\. -* hcloud\_network Add expose\_routes\_to\_vswitch field\. -* hcloud\_network\_info Return expose\_routes\_to\_vswitch for network\. -* hcloud\_primary\_ip\_info Create hcloud\_primary\_ip\_info module -* hcloud\_rdns \- Allow selecting a server\, floating\_ip\, primary\_ip or load\_balancer using its ID\. -* hcloud\_route \- Allow selecting a network using its ID\. -* hcloud\_server \- Add created field -* hcloud\_server Show warning if used server\_type is deprecated\. -* hcloud\_server\_info \- Add created field -* hcloud\_server\_network \- Allow selecting a network or server using its ID\. -* hcloud\_server\_type\_info \- Add field included\_traffic to returned server types -* hcloud\_server\_type\_info Return deprecation info for server types\. -* hcloud\_subnetwork \- Allow selecting to a network using its ID\. -* inventory \- Allow caching the hcloud inventory\. -* python\-dateutil \>\= 2\.7\.5 is now required by the collection\. If you already have the hcloud package installed\, this dependency should also be installed\. -* requests \>\= 2\.20 is now required by the collection\. If you already have the hcloud package installed\, this dependency should also be installed\. - - -#### inspur\.ispim - -* Change the ansible\-test\.yml application file version\. -* Modify logical disk creation\, add MV raid card compatible\. -* The edit\_bios module adds the list field\. - - -#### junipernetworks\.junos - -* junos\_ospfv2 \- Fix the authentication config when password is configured -* junos\_ospfv2 \- Rename key ospf to ospfv2 in facts\. -* junos\_ospfv2 \- add area\_ranges attribute which supports list of dict attributes\. -* junos\_ospfv2 \- add attributes allow\_route\_leaking\, stub\_network and as\-external to overload dict\. -* junos\_ospfv2 \- add attributes no\_ignore\_out\_externals to spf\_options dict\. -* junos\_ospfv2 \- fix to gather reference\_bandwidth and rfc1583compatibility\. -* add acl\_interfaces key for junos\_facts output\. -* add overridden state opperation support\. - - -#### lowlydba\.sqlserver - -* Add refresh workaround for agent schedule bug where properties returned are stale\. \([https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/185](https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/185)\) -* Added SID as an optional parameter to the login module \([https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/189](https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/189)\) -* Added only\_accessible as an optional parameter to the database module \([https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/198](https\://github\.com/lowlydba/lowlydba\.sqlserver/pull/198)\) -* Fixes error handling for Remove\-DbaDatabase when joined to AvailabilityGroup\, exception was not being thrown so we have to parse Status - - -#### microsoft\.ad - -* AD objects will no longer be moved to the default AD path for their type if no path was specified\. Use the value microsoft\.ad\.default\_path to explicitly set the path to the default path if that behaviour is desired\. -* microsoft\.ad\.debug\_ldap\_client \- Add dpapi\_ng to list of packages checked -* microsoft\.ad\.ldap \- Add support for decrypting LAPS encrypted password -* microsoft\.ad\.ldap \- Added the option filter\_without\_computer to not add the AND clause objectClass\=computer to the final filter used \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/55](https\://github\.com/ansible\-collections/microsoft\.ad/issues/55) -* microsoft\.ad\.ldap \- Allow setting LDAP connection and authentication options through environment variables \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/34](https\://github\.com/ansible\-collections/microsoft\.ad/issues/34) - - -#### netapp\.ontap - -* na\_ontap\_broadcast\_domain \- changed documentation for ipspace as it is required while using REST\. -* na\_ontap\_cg\_snapshot \- added REST support to the cg snapshot module\, requires ONTAP 9\.10\.1 or later\. -* na\_ontap\_cifs\_server \- new option default\_site added in REST\, requires ONTAP 9\.13\.1 or later\. -* na\_ontap\_ems\_destination \- new option certificate\, ca added\. -* na\_ontap\_kerberos\_realm \- add REST support for admin\_server\_ip\, admin\_server\_port\, pw\_server\_ip\, pw\_server\_port and clock\_skew from ONTAP 9\.13\.1 or later -* na\_ontap\_lun \- new option qtree\_name added in REST\. -* na\_ontap\_name\_mappings \- added choices s3\_win and s3\_unix to direction\, requires ONTAP 9\.12\.1 or later\. -* na\_ontap\_net\_ifgrp \- return name and other details of a newly created interface group in module output in REST\. -* na\_ontap\_qos\_policy\_group \- added new REST only options expected\_iops\_allocation and peak\_iops\_allocation\, requires ONTAP 9\.10\.1 or later\. -* na\_ontap\_rest\_info \- new option hal\_linking added to enable or disable HAL links\. -* na\_ontap\_restit \- returns changed as False for GET method\. -* na\_ontap\_s3\_buckets \- new option nas\_path added\, requires ONTAP 9\.12\.1 or later\. -* na\_ontap\_snmp \- added REST support for snmpv3 user\. -* na\_ontap\_user \- Added warning message when password is not changed\. -* na\_ontap\_volume \- added REST support for atime\_update requires ONTAP 9\.8 or later\, snapdir\_access and snapshot\_auto\_delete requires ONTAP 9\.13\.1 or later\. -* na\_ontap\_volume \- added new REST only options vol\_nearly\_full\_threshold\_percent and vol\_full\_threshold\_percent\, requires ONTAP 9\.9 or later\. - - -#### netbox\.netbox - -* API \- Add possibility to use Bearer token \[\#1023\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1023](https\://github\.com/netbox\-community/ansible\_modules/pull/1023)\) -* custom fields \- Add datetime as an custom field option \[\#1019\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1019](https\://github\.com/netbox\-community/ansible\_modules/pull/1019)\) -* netbox\_cable \- Add tenant \[\#1027\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1027](https\://github\.com/netbox\-community/ansible\_modules/pull/1027)\) -* netbox\_circuit\_type\, netbox\_device\_interface \- Add missing options \[\#1025\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1025](https\://github\.com/netbox\-community/ansible\_modules/pull/1025)\) -* netbox\_config\_template \- New module \[\#1090\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1090](https\://github\.com/netbox\-community/ansible\_modules/pull/1090)\) -* netbox\_custom\_field \- Add hidden\-ifunset option \[\#1048\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1048](https\://github\.com/netbox\-community/ansible\_modules/pull/1048)\) -* netbox\_device \- Add oob\_ip to device \[\#1085\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1085](https\://github\.com/netbox\-community/ansible\_modules/pull/1085)\) -* netbox\_device\_type \- Add default\_platform \[\#1092\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1092](https\://github\.com/netbox\-community/ansible\_modules/pull/1092)\) -* netbox\_inventory\_item \- Add role to module \[\#1050\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1050](https\://github\.com/netbox\-community/ansible\_modules/pull/1050)\) -* netbox\_power\_port \- Add missing power port option \[\#1049\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1049](https\://github\.com/netbox\-community/ansible\_modules/pull/1049)\) - - -#### ovirt\.ovirt - -* ovirt\_vm \- Add tpm\_enabled \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/722](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/722)\)\. -* storage\_error\_resume\_behaviour \- Support VM storage error resume behaviour \"auto\_resume\"\, \"kill\"\, \"leave\_paused\"\. \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/721](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/721)\) -* vm\_infra \- Support boot disk renaming and resizing\. \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/705](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/705)\) - - -#### purestorage\.flasharray - -* purefa\_eradication \- Added support for disabled and enabled timers from Purity//FA 6\.4\.10 -* purefa\_info \- Add port\_connectivity information for hosts -* purefa\_info \- Add array subscription data -* purefa\_info \- Add promotion status information for volumes -* purefa\_info \- Added nfs\_version to policies and rules from Purity//FA 6\.4\.10 -* purefa\_info \- Added total\_used to multiple sections from Purity//FA 6\.4\.10 -* purefa\_info \- Added support for autodir policies -* purefa\_info \- Prive array timezone from Purity//FA 6\.4\.10 -* purefa\_info \- Report NTP Symmetric key presence from Purity//FA 6\.4\.10 -* purefa\_network \- Add support for creating/modifying VIF and LACP\_BOND interfaces -* purefa\_network \- enabled option added\. This must now be used instead of state\=absent to disable a physical interface as state\=absent can now fully delete a non\-physical interface -* purefa\_ntp \- Added support for NTP Symmetric Key from Purity//FA 6\.4\.10s -* purefa\_offload \- Added a new profile parameter\. -* purefa\_pgsched \- Change snap\_at and replicate\_at to be AM or PM hourly -* purefa\_pgsnap \- Add protection group snapshot rename functionality -* purefa\_pgsnap \- Added new parameter to support snapshot throttling -* purefa\_policy \- Added support for autodir policies -* purefa\_policy \- Added support for multiple NFS versions from Purity//FA 6\.4\.10 -* purefa\_proxy \- Add new protocol parameter\, defaults to https -* purefa\_snap \- Added new parameter to support snapshot throttling -* purefa\_vg \- Add rename parameter - - -#### purestorage\.flashblade - -* purefb\_bucket\_replica \- Added support for cascading replica links -* purefb\_fs \- Added support for SMB client and share policies -* purefb\_fs\_replica \- Added support to delete filesystem replica links from REST 2\.10 -* purefb\_info \- Add drive type in drives subset for //S and //E platforms\. Only available from REST 2\.9\. -* purefb\_info \- Added support for SMB client and share policies -* purefb\_info \- New fields to display free space \(remaining quota\) for Accounts and Buckets\. Space used by destroyed buckets is split out from virtual field to new destroyed\_virtual field -* purefb\_info \- Report encryption state in SMB client policy rules -* purefb\_info \- Report more detailed space data from Purity//FB 4\.3\.0 -* purefb\_policy \- Add deny effect for object store policy rules\. Requires Purity//FB 4\.3\.0\+ -* purefb\_policy \- Add new and updated policy access rights -* purefb\_policy \- Added parameter to define object store policy description -* purefb\_policy \- Added support for SMB client and share policies -* purefb\_s3acc \- Allow human readable quota sizes\; eg\. 1T\, 230K\, etc -* purefb\_s3user \- Add new boolean parameter I\(multiple\_keys\) to limit access keys for a user to a single key\. - - -#### purestorage\.fusion - -* FUSION\_API\_HOST \&\& FUSION\_HOST \- changed logic\, now this variables require host name without path -* Fusion authentication \- add \'access\_token\' module\'s parameter and \'FUSION\_ACCESS\_TOKEN\' environment variable\, as an alternative way of the authentication\. -* all modules \- return resource\'s id parameter on update and create\. -* fusion \- added private key password\, which is used to decrypt private key files -* fusion\_array \- added apartment\_id argument\, which can be used when creating an array\. -* fusion\_info \- array is None if missing in volume -* fusion\_info \- hardware\_types is None if missing in storage\_service -* fusion\_info \- network\_interface\_groups is None if missing in iscsi\_interfaces in storage\_endpoint -* fusion\_info \- introduce \'availability\_zones\' subset option -* fusion\_info \- introduce \'host\_access\_policies\' subset option -* fusion\_info \- introduce \'network\_interfaces\' subset option -* fusion\_info \- introduce \'regions\' subset option -* fusion\_info \- rename \'appliances\' in default dict to \'arrays\' for consistency -* fusion\_info \- rename \'hosts\' dict to \'host\_access\_policies\' for consistency -* fusion\_info \- rename \'interfaces\' dict to \'network\_interfaces\' for consistency -* fusion\_info \- rename \'placements\_groups\' in default dict to \'placement\_groups\' for consistency -* fusion\_info \- rename \'zones\' dict to \'availability\_zones\' for consistency -* fusion\_info \- rename hardware to hardware\_types in response for consistency -* fusion\_info \- rename storageclass to storage\_classes in response for consistency -* fusion\_pg \- introduced destroy\_snapshots\_on\_delete which\, if set to true\, ensures that before deleting placement group\, snapshots within the placement group will be deleted\. -* fusion\_pp \- \'local\_rpo\' duration parsing documented\, \'local\_retention\' minimum value fixed -* fusion\_pp \- Allow leading zeros in duration strings -* fusion\_pp \- Change the minimum value of the protection policy local retention from 1 to 10 -* fusion\_pp \- duration parsing improved\. Supports combination of time units \(E\.g 5H5M\) -* fusion\_pp \- introduced destroy\_snapshots\_on\_delete which\, if set to true\, ensures that before deleting protection policy\, snapshots within the protection policy will be deleted\. -* fusion\_ra \- added api\_client\_key argument\, which can be used instead of user and principal argument -* fusion\_ra \- added principal argument\, which is an ID of either API client or User and can be used instead of user argument -* fusion\_se \- add support for CBS Storage Endpoint -* fusion\_volume \- Allow creating a new volume from already existing volume or volume snapshot - - -#### sensu\.sensu\_go - -* Added Docker file configurations for Ubuntu 20\.04 and 22\.04 -* Added aditional parameters for Postgres resource to datastore module -* Added bcrypt check to user module -* Added docs for backends and package\_name filter -* Added symlink for AlmaLinux\.yml for alma linux 9 support - - -#### t\_systems\_mms\.icinga\_director - -* Add Icinga Deploy handler and module \([https\://github\.com/T\-Systems\-MMS/ansible\-collection\-icinga\-director/pull/205](https\://github\.com/T\-Systems\-MMS/ansible\-collection\-icinga\-director/pull/205)\) - - -#### theforeman\.foreman - -* compute\_resource \- add support for OpenStack -* content\_view\_filter \- add deb filter type -* content\_view\_filter\_rule \- add spec for deb filter rules -* content\_view\_promote role \- also accept all parameters of the content\_view\_version module \([https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1591](https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1591)\) -* content\_view\_version \- include information about the published version in the return value of the module -* job\-invocation \- add recurrence purpose and description\_format parameters -* locations role \- New role to manage locations -* organizations role \- accept parameters and ignore\_types like the module does -* repositories role \- allow disabling/removing of repositories by setting the state parameter - - -#### vultr\.cloud - -* instance \- Implemented a new state equal reinstalled to reinstall an existing instance \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/66](https\://github\.com/vultr/ansible\-collection\-vultr/pull/66)\)\. -* inventory \- Added VPC/VPC 2\.0 support by adding internal\_ip to the attributes \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/86](https\://github\.com/vultr/ansible\-collection\-vultr/issues/86)\)\. -* inventory \- Bare metal support has been implemented \([https\://github\.com/vultr/ansible\-collection\-vultr/pull/63](https\://github\.com/vultr/ansible\-collection\-vultr/pull/63)\)\. - - -#### vyos\.vyos - -* vyos\-l3\_interface\_support \- Add support for Tunnel\, Bridge and Dummy interfaces\. \([https\://github\.com/ansible\-collections/vyos\.vyos/issues/265](https\://github\.com/ansible\-collections/vyos\.vyos/issues/265)\) - - -### Breaking Changes / Porting Guide - - -#### Ansible\-core - -* Any plugin using the config system and the cli entry to use the timeout from the command line\, will see the value change if the use had configured it in any of the lower precedence methods\. If relying on this behaviour to consume the global/generic timeout from the DEFAULT\_TIMEOUT constant\, please consult the documentation on plugin configuration to add the overlaping entries\. -* ansible\-test \- Test plugins that rely on containers no longer support reusing running containers\. The previous behavior was an undocumented\, untested feature\. -* service module will not permanently configure variables/flags for openbsd when doing enable/disable operation anymore\, this module was never meant to do this type of work\, just to manage the service state itself\. A rcctl\_config or similar module should be created and used instead\. - - -#### amazon\.aws - -* The amazon\.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](https\://github\.com/ansible\-collections/amazon\.aws/pull/1763)\)\. -* amazon\.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/](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](https\://github\.com/ansible\-collections/amazon\.aws/pull/1763)\)\. -* module\_utils \- module\_utils\.urls was previously deprecated and has been removed \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1540](https\://github\.com/ansible\-collections/amazon\.aws/pull/1540)\)\. -* module\_utils\.\_version \- vendored copy of distutils\.version has been dropped \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1587](https\://github\.com/ansible\-collections/amazon\.aws/pull/1587)\)\. - - -#### community\.aws - -* 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](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 \- 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/](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](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](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](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](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](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](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\. - - -#### community\.general - -* collection\_version lookup plugin \- remove compatibility code for ansible\-base 2\.10 and ansible\-core 2\.11 \([https\://github\.com/ansible\-collections/community\.general/pull/7269](https\://github\.com/ansible\-collections/community\.general/pull/7269)\)\. -* gitlab\_project \- add default\_branch support for project update\. If you used the module so far with default\_branch to update a project\, the value of default\_branch was ignored\. Make sure that you either do not pass a value if you are not sure whether it is the one you want to have to avoid unexpected breaking changes \([https\://github\.com/ansible\-collections/community\.general/pull/7158](https\://github\.com/ansible\-collections/community\.general/pull/7158)\)\. -* selective callback plugin \- remove compatibility code for Ansible 2\.9 and ansible\-core 2\.10 \([https\://github\.com/ansible\-collections/community\.general/pull/7269](https\://github\.com/ansible\-collections/community\.general/pull/7269)\)\. -* vardict module utils \- VarDict will no longer accept variables named \_var\, get\_meta\, and as\_dict \([https\://github\.com/ansible\-collections/community\.general/pull/6647](https\://github\.com/ansible\-collections/community\.general/pull/6647)\)\. -* version module util \- remove fallback for ansible\-core 2\.11\. All modules and plugins that do version collections no longer work with ansible\-core 2\.11 \([https\://github\.com/ansible\-collections/community\.general/pull/7269](https\://github\.com/ansible\-collections/community\.general/pull/7269)\)\. - - -#### community\.hashi\_vault - -* The minimum required version of hvac is now 1\.2\.1 \([https\://docs\.ansible\.com/ansible/devel/collections/community/hashi\_vault/docsite/user\_guide\.html\#hvac\-version\-specifics](https\://docs\.ansible\.com/ansible/devel/collections/community/hashi\_vault/docsite/user\_guide\.html\#hvac\-version\-specifics)\)\. - - -#### community\.vmware - -* Removed support for ansible\-core version \< 2\.15\.0\. -* vmware\_dvs\_host \- removed defaults for vmnics and lag\_uplinks \([https\://github\.com/ansible\-collections/community\.vmware/issues/1516](https\://github\.com/ansible\-collections/community\.vmware/issues/1516)\)\. -* vmware\_host\_acceptance \- removed acceptance\_level and used its options in state\. This also means there will be no state list anymore\. In order to get information about the current acceptance level\, use the new module vmware\_host\_acceptance\_info \([https\://github\.com/ansible\-collections/community\.vmware/issues/1872](https\://github\.com/ansible\-collections/community\.vmware/issues/1872)\)\. -* vmware\_vm\_info \- added prefix length to IP addresses in vm\_network\, so they now show up as for example 10\.76\.33\.228/24 instead of just 10\.76\.33\.228 \([https\://github\.com/ansible\-collections/community\.vmware/issues/1761](https\://github\.com/ansible\-collections/community\.vmware/issues/1761)\)\. - - -#### dellemc\.enterprise\_sonic - -* sonic\_aaa \- Add default\_auth attribute to the argspec to replace the deleted group and local attributes\. This change allows for ordered login authentication\. \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/195](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/195)\)\. - - -#### hetzner\.hcloud - -* Drop support for ansible\-core 2\.12 -* Drop support for python 3\.7 -* hcloud\-python 1\.20\.0 is now required for full compatibility -* inventory plugin \- Don\'t set the server image variables \(image\_id\, image\_os\_flavor and image\_name\) when the server image is not defined\. - - -### Deprecated Features - -* The community\.azure collection is officially unmaintained and has been archived\. Therefore\, it will be removed from Ansible 10\. There is already a successor collection azure\.azcollection in the community package which should cover the same functionality \([https\://github\.com/ansible\-community/community\-topics/issues/263](https\://github\.com/ansible\-community/community\-topics/issues/263)\)\. -* The hpe\.nimble collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://github\.com/ansible\-community/community\-topics/issues/254](https\://github\.com/ansible\-community/community\-topics/issues/254)\)\. -* The collection community\.sap has been renamed to community\.sap\_libs\. For now both collections are included in Ansible\. The content in community\.sap has deprecated redirects to the new collection in Ansible 9\.0\.0\, and the collection will be removed from Ansible 10 completely\. Please update your FQCNs for community\.sap\. -* The collection ibm\.spectrum\_virtualize has been renamed to ibm\.storage\_virtualize\. For now\, both collections are included in Ansible\. The content in ibm\.spectrum\_virtualize will be replaced with deprecated redirects to the new collection in Ansible 10\.0\.0\, and these redirects will eventually be removed from Ansible\. Please update your FQCNs for ibm\.spectrum\_virtualize\. -* The collection t\_systems\_mms\.icinga\_director has been renamed to telekom\_mms\.icinga\_director\. For now both collections are included in Ansible\. The content in t\_systems\_mms\.icinga\_director has been replaced with deprecated redirects to the new collection in Ansible 9\.0\.0\, and these redirects will be removed from Ansible 11\. Please update your FQCNs for t\_systems\_mms\.icinga\_director\. -* The netapp\.azure collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://github\.com/ansible\-community/community\-topics/issues/234](https\://github\.com/ansible\-community/community\-topics/issues/234)\)\. -* The netapp\.elementsw collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://github\.com/ansible\-community/community\-topics/issues/235](https\://github\.com/ansible\-community/community\-topics/issues/235)\)\. -* The netapp\.um\_info collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10\. See [the removal process for details on how this works](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#cancelling\-removal\-of\-an\-unmaintained\-collection) \([https\://github\.com/ansible\-community/community\-topics/issues/244](https\://github\.com/ansible\-community/community\-topics/issues/244)\)\. - - -#### Ansible\-core - -* Deprecated ini config option collections\_paths\, use the singular form collections\_path instead -* Deprecated the env var ANSIBLE\_COLLECTIONS\_PATHS\, use the singular form ANSIBLE\_COLLECTIONS\_PATH instead -* Old style vars plugins which use the entrypoints get\_host\_vars or get\_group\_vars are deprecated\. The plugin should be updated to inherit from BaseVarsPlugin and define a get\_vars method as the entrypoint\. -* Support for Windows Server 2012 and 2012 R2 has been removed as the support end of life from Microsoft is October 10th 2023\. These versions of Windows will no longer be tested in this Ansible release and it cannot be guaranteed that they will continue to work going forward\. -* STRING\_CONVERSION\_ACTION config option is deprecated as it is no longer used in the Ansible Core code base\. -* the \'smart\' option for setting a connection plugin is being removed as its main purpose \(choosing between ssh and paramiko\) is now irrelevant\. -* vault and unfault filters \- the undocumented vaultid parameter is deprecated and will be removed in ansible\-core 2\.20\. Use vault\_id instead\. -* yum\_repository \- deprecated parameter \'keepcache\' \([https\://github\.com/ansible/ansible/issues/78693](https\://github\.com/ansible/ansible/issues/78693)\)\. - - -#### amazon\.aws - -* ec2\_instance \- deprecation of tenancy and placement\_group in favor of placement attribute \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1825](https\://github\.com/ansible\-collections/amazon\.aws/pull/1825)\)\. -* s3\_object \- support for passing object keys with a leading / has been deprecated and will be removed in a release after 2025\-12\-01 \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1549](https\://github\.com/ansible\-collections/amazon\.aws/pull/1549)\)\. - - -#### ansible\.netcommon - -* libssh \- the ssh\_\*\_args options are now marked that they will be removed after 2026\-01\-01\. - - -#### ansible\.windows - -* Add warning when using Server 2012 or 2012 R2 with the setup module\. These OS\' are nearing the End of Life and will not be tested in CI when that time is reached\. -* win\_domain \- Module is deprecated in favour of the microsoft\.ad\.domain module\, the ansible\.windows\.win\_domain module will be removed in the 3\.0\.0 release of this collection\. -* win\_domain\_controller \- Module is deprecated in favour of the microsoft\.ad\.domain\_controller module\, the ansible\.windows\.win\_domain\_controller module will be removed in the 3\.0\.0 release of this collection\. -* win\_domain\_membership \- Module is deprecated in favour of the microsoft\.ad\.membership module\, the ansible\.windows\.win\_domain\_membership module will be removed in the 3\.0\.0 release of this collection\. - - -#### cisco\.ios - -* ios\_snmp\_server \- deprecate traps\.envmon\.fan with traps\.envmon\.fan\_enable -* ios\_snmp\_server \- deprecate traps\.mpls\_vpn with traps\.mpls -* ospfv2 \- removed passive\_interface to passive\_interfaces that supports a list of interfaces - - -#### cisco\.iosxr - -* Deprecated iosxr\_bgp module in favor of iosxr\_bgp\_global\,iosxr\_bgp\_neighbor\_address\_family and iosxr\_bgp\_address\_family\. -* iosxr\_l2\_interfaces \- deprecate q\_vlan with qvlan which allows vlans in str format e\.g \"any\" - - -#### community\.ciscosmb - -* support for Python 2\.6 nad 2\.7 -* support for ansible 2\.9 - - -#### community\.crypto - -* get\_certificate \- the default false of the asn1\_base64 option is deprecated and will change to true in community\.crypto 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.crypto/pull/600](https\://github\.com/ansible\-collections/community\.crypto/pull/600)\)\. - - -#### community\.general - -* CmdRunner module utils \- deprecate cmd\_runner\_fmt\.as\_default\_type\(\) formatter \([https\://github\.com/ansible\-collections/community\.general/pull/6601](https\://github\.com/ansible\-collections/community\.general/pull/6601)\)\. -* MH VarsMixin module utils \- deprecates VarsMixin and supporting classes in favor of plain vardict module util \([https\://github\.com/ansible\-collections/community\.general/pull/6649](https\://github\.com/ansible\-collections/community\.general/pull/6649)\)\. -* The next major release\, community\.general 8\.0\.0\, will drop support for ansible\-core 2\.11 and 2\.12\, which have been End of Life for some time now\. This means that this collection no longer supports Python 2\.6 on the target\. Individual content might still work with unsupported ansible\-core versions\, but that can change at any time\. Also please note that from now on\, for every new major community\.general release\, we will drop support for all ansible\-core versions that have been End of Life for more than a few weeks on the date of the major release \([https\://github\.com/ansible\-community/community\-topics/discussions/271](https\://github\.com/ansible\-community/community\-topics/discussions/271)\, [https\://github\.com/ansible\-collections/community\.general/pull/7259](https\://github\.com/ansible\-collections/community\.general/pull/7259)\)\. -* ansible\_galaxy\_install \- the ack\_ansible29 and ack\_min\_ansiblecore211 options have been deprecated and will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* consul \- the ack\_params\_state\_absent option has been deprecated and will be removed in community\.general 10\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* cpanm \- value compatibility is deprecated as default for parameter mode \([https\://github\.com/ansible\-collections/community\.general/pull/6512](https\://github\.com/ansible\-collections/community\.general/pull/6512)\)\. -* ejabberd\_user \- deprecate the parameter logging in favour of producing more detailed information in the module output \([https\://github\.com/ansible\-collections/community\.general/pull/7043](https\://github\.com/ansible\-collections/community\.general/pull/7043)\)\. -* flowdock \- module relies entirely on no longer responsive API endpoints\, and it will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6930](https\://github\.com/ansible\-collections/community\.general/pull/6930)\)\. -* proxmox \- old feature flag proxmox\_default\_behavior will be removed in community\.general 10\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6836](https\://github\.com/ansible\-collections/community\.general/pull/6836)\)\. -* proxmox\_kvm \- deprecate the option proxmox\_default\_behavior \([https\://github\.com/ansible\-collections/community\.general/pull/7377](https\://github\.com/ansible\-collections/community\.general/pull/7377)\)\. -* redfish\_info\, redfish\_config\, redfish\_command \- the default value 10 for the timeout option is deprecated and will change to 60 in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/7295](https\://github\.com/ansible\-collections/community\.general/pull/7295)\)\. -* redhat module utils \- the module\_utils\.redhat module is deprecated\, as - effectively unused\: the Rhsm\, RhsmPool\, and RhsmPools classes - will be removed in community\.general 9\.0\.0\; the RegistrationBase class - will be removed in community\.general 10\.0\.0 together with the - rhn\_register module\, as it is the only user of this class\; this means - that the whole module\_utils\.redhat module will be dropped in - community\.general 10\.0\.0\, so importing it without even using anything of it - will fail - \([https\://github\.com/ansible\-collections/community\.general/pull/6663](https\://github\.com/ansible\-collections/community\.general/pull/6663)\)\. -* redhat\_subscription \- the autosubscribe alias for the auto\_attach option has been - deprecated for many years\, although only in the documentation\. Officially mark this alias - as deprecated\, and it will be removed in community\.general 9\.0\.0 - \([https\://github\.com/ansible\-collections/community\.general/pull/6646](https\://github\.com/ansible\-collections/community\.general/pull/6646)\)\. -* redhat\_subscription \- the pool option is deprecated in favour of the - more precise and flexible pool\_ids option - \([https\://github\.com/ansible\-collections/community\.general/pull/6650](https\://github\.com/ansible\-collections/community\.general/pull/6650)\)\. -* rhsm\_repository \- state\=present has not been working as expected for many years\, - and it seems it was not noticed so far\; also\, \"presence\" is not really a valid concept - for subscription repositories\, which can only be enabled or disabled\. Hence\, mark the - present and absent values of the state option as deprecated\, slating them - for removal in community\.general 10\.0\.0 - \([https\://github\.com/ansible\-collections/community\.general/pull/6673](https\://github\.com/ansible\-collections/community\.general/pull/6673)\)\. -* stackdriver \- module relies entirely on no longer existent API endpoints\, and it will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6887](https\://github\.com/ansible\-collections/community\.general/pull/6887)\)\. -* webfaction\_app \- module relies entirely on no longer existent API endpoints\, and it will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6909](https\://github\.com/ansible\-collections/community\.general/pull/6909)\)\. -* webfaction\_db \- module relies entirely on no longer existent API endpoints\, and it will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6909](https\://github\.com/ansible\-collections/community\.general/pull/6909)\)\. -* webfaction\_domain \- module relies entirely on no longer existent API endpoints\, and it will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6909](https\://github\.com/ansible\-collections/community\.general/pull/6909)\)\. -* webfaction\_mailbox \- module relies entirely on no longer existent API endpoints\, and it will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6909](https\://github\.com/ansible\-collections/community\.general/pull/6909)\)\. -* webfaction\_site \- module relies entirely on no longer existent API endpoints\, and it will be removed in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/6909](https\://github\.com/ansible\-collections/community\.general/pull/6909)\)\. - - -#### community\.postgresql - -* postgresql\_lang \- the module has been deprecated and will be removed in community\.postgresql 4\.0\.0\. Please use the postgresql\_ext module instead \([https\://github\.com/ansible\-collections/community\.postgresql/issues/559](https\://github\.com/ansible\-collections/community\.postgresql/issues/559)\)\. - - -#### community\.sap - -* community\.sap\.hana\_query \- is deprecated in favor of community\.sap\_libs\.sap\_hdbsql -* community\.sap\.sap\_company \- is deprecated in favor of community\.sap\_libs\.sap\_company -* community\.sap\.sap\_snote \- is deprecated in favor of community\.sap\_libs\.sap\_snote -* community\.sap\.sap\_task\_list\_execute \- is deprecated in favor of community\.sap\_libs\.sap\_task\_list\_execute -* community\.sap\.sap\_user \- is deprecated in favor of community\.sap\_libs\.sap\_user -* community\.sap\.sapcar\_extract \- is deprecated in favor of community\.sap\_libs\.sapcar\_extract - - -#### community\.windows - -* win\_domain\_computer \- Module is deprecated in favour of the microsoft\.ad\.computer module\, the community\.windows\.win\_domain\_computer module will be removed in the 3\.0\.0 release of this collection\. -* win\_domain\_group \- Module is deprecated in favour of the microsoft\.ad\.group module\, the community\.windows\.win\_domain\_group module will be removed in the 3\.0\.0 release of this collection\. -* win\_domain\_group\_membership \- Module is deprecated in favour of the microsoft\.ad\.group module\, the community\.windows\.win\_domain\_group\_membership module will be removed in the 3\.0\.0 release of this collection\. -* win\_domain\_object\_info \- Module is deprecated in favour of the microsoft\.ad\.object\_info module\, the community\.windows\.win\_domain\_object\_info module will be removed in the 3\.0\.0 release of this collection\. -* win\_domain\_ou \- Module is deprecated in favour of the microsoft\.ad\.ou module\, the community\.windows\.win\_domain\_ou module will be removed in the 3\.0\.0 release of this collection\. -* win\_domain\_user \- Module is deprecated in favour of the microsoft\.ad\.user module\, the community\.windows\.win\_domain\_user module will be removed in the 3\.0\.0 release of this collection\. - - -#### junipernetworks\.junos - -* junos\_ospfv2 \- add deprecate warning for area\_range\. -* add deprecate warning for junos\_acl\_interfaces key for junos facts results\. - - -#### microsoft\.ad - -* Deprecating support for Server 2012 and Server 2012 R2\. These OS versions are reaching End of Life status from Microsoft and support for using them in Ansible are nearing its end\. - - -#### purestorage\.fusion - -* fusion\_api\_client \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_array \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_az \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_hap \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_hap \- parameters nqn\, wwns\, host\_password\, host\_user\, target\_password\`and \`target\_user were deprecated -* fusion\_hw \- FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_info \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_info \- \'hosts\' subset is deprecated in favor of \'host\_access\_policies\' and will be removed in the version 2\.0\.0 -* fusion\_info \- \'interfaces\' subset is deprecated in favor of \'network\_interfaces\' and will be removed in the version 2\.0\.0 -* fusion\_info \- \'zones\' subset is deprecated in favor of \'availability\_zones\' and will be removed in the version 2\.0\.0 -* fusion\_ni \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_nig \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_pg \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_pp \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_ra \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_region \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_sc \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_se \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_se \- endpoint\_type parameter is now deprecated and will be removed in version 2\.0\.0 -* fusion\_ss \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_tenant \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_tn \- FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_ts \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 -* fusion\_volume \- \'app\_id\' and \'key\_file\' parameters are deprecated in favor of \'issuer\_id\' and \'private\_key\_file\' parameters and will be removed in the version 2\.0\.0\, FUSION\_APP\_ID and FUSION\_HOST env variables are deprecated in favor of FUSION\_ISSUER\_ID and FUSION\_HOST and will be removed in the version 2\.0\.0 - - -#### t\_systems\_mms\.icinga\_director - -* All modules and plugins are moved to the new namespace telekom\_mms\. Please update your code accordingly\. - - -### Removed Features \(previously deprecated\) - -* The deprecated servicenow\.servicenow collection has been removed from Ansible 7\, but accidentally re\-added to Ansible 8\. It has been removed again from Ansible 9 \([https\://github\.com/ansible\-community/community\-topics/issues/246](https\://github\.com/ansible\-community/community\-topics/issues/246)\)\. -* The ngine\_io\.vultr collection has been removed from Ansible 9\, because it is officially unmaintained and has been archived\. The successor collection vultr\.cloud \(using the recent v2 Vultr API\) covers the same functionality but might not have compatible syntax \([https\://github\.com/ansible\-community/community\-topics/issues/257](https\://github\.com/ansible\-community/community\-topics/issues/257)\)\. -* cisco\.nso was considered unmaintained and removed from Ansible 9 as per the [removal from Ansible process](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#unmaintained\-collections)\. Users can still install this collection with ansible\-galaxy collection install cisco\.nso\. -* community\.fortios was considered unmaintained and removed from Ansible 9 as per the [removal from Ansible process](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#unmaintained\-collections)\. Users can still install this collection with ansible\-galaxy collection install community\.fortios\. -* community\.google was considered unmaintained and removed from Ansible 9 as per the [removal from Ansible process](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#unmaintained\-collections)\. Users can still install this collection with ansible\-galaxy collection install community\.google\. -* community\.skydive was considered unmaintained and removed from Ansible 9 as per the [removal from Ansible process](https\://github\.com/ansible\-collections/overview/blob/main/removal\_from\_ansible\.rst\#unmaintained\-collections)\. Users can still install this collection with ansible\-galaxy collection install community\.skydive\. - - -#### Ansible\-core - -* ActionBase \- remove deprecated \_remote\_checksum method -* PlayIterator \- remove deprecated cache\_block\_tasks and get\_original\_task methods -* Remove deprecated FileLock class -* Removed Python 3\.9 as a supported version on the controller\. Python 3\.10 or newer is required\. -* Removed include which has been deprecated in Ansible 2\.12\. Use include\_tasks or import\_tasks instead\. -* Templar \- remove deprecated shared\_loader\_obj parameter of \_\_init\_\_ -* fetch\_url \- remove auto disabling decompress when gzip is not available -* get\_action\_args\_with\_defaults \- remove deprecated redirected\_names method parameter -* ansible\-test \- Removed support for the remote Windows targets 2012 and 2012\-R2 -* inventory\_cache \- remove deprecated default\.fact\_caching\_prefix ini configuration option\, use defaults\.fact\_caching\_prefix instead\. -* module\_utils/basic\.py \- Removed Python 3\.5 as a supported remote version\. Python 2\.7 or Python 3\.6\+ is now required\. -* stat \- removed unused get\_md5 parameter\. - - -#### ansible\.windows - -* win\_get\_url \- Removed the deprecated option alias passwordd\, use url\_password instead\. -* win\_get\_url \- Removed the deprecated option alias user and username\, use url\_username instead\. -* win\_package \- Removed deprecated module option ensure\, use state instead\. -* win\_package \- Removed deprecated module option productid\, use product\_id instead\. -* win\_package \- Removed deprecated module option username\, user\_name\, password\, and user\_password\. Use become with become\_flags\: logon\_type\=new\_credentials logon\_flags\=netcredentials\_only on the task instead to replicate the same functionality instead\. -* win\_reboot \- Removed backwards compatibility check where ignore\_errors\: true will be treated like ignore\_unreachable\: true\. Going forward ignore\_errors\: true will only ignore errors the plugin encountered and not an unreachable host\. Use ignore\_unreachable\: true to ignore that error like any other module\. -* win\_regedit \- Removed support for using a path with forward slashes as a key separator\. Using a forward slash has been deprecated since Ansible 2\.9\. If using forward slashes in the win\_regedit path value\, make sure to change the forward slash / to a backslash \\\. If enclosed in double quotes the backslash will have to be doubled up\. -* win\_updates \- Removed deprecated alias blacklist\, use reject\_list instead\. -* win\_updates \- Removed deprecated alias whitelist\, use accept\_list instead\. -* win\_updates \- Removed deprecated module option use\_scheduled\_task\. This option did not change any functionality in the module and can be safely removed from the task entry\. -* win\_uri \- Removed the deprecated option alias password\, use url\_password instead\. -* win\_uri \- Removed the deprecated option alias user and username\, use url\_username instead\. - - -#### cisco\.ios - -* Deprecated ios\_logging module in favor of ios\_logging\_global\. -* Deprecated next\_hop\_self attribute for bgp\_address\_family with nexthop\_self\. - - -#### cisco\.nxos - -* The nxos\_bgp module has been removed with this release\. -* The nxos\_bgp\_af module has been removed with this release\. -* The nxos\_bgp\_neighbor module has been removed with this release\. -* The nxos\_bgp\_neighbor\_af module has been removed with this release\. - - -#### community\.ciscosmb - -* remove testing for Python 2\.6 nad 2\.7 -* remove testing for ansible 2\.9 - - -#### community\.general - -* The collection no longer supports ansible\-core 2\.11 and ansible\-core 2\.12\. Parts of the collection might still work on these ansible\-core versions\, but others might not \([https\://github\.com/ansible\-collections/community\.general/pull/7269](https\://github\.com/ansible\-collections/community\.general/pull/7269)\)\. -* ansible\_galaxy\_install \- support for Ansible 2\.9 and ansible\-base 2\.10 has been removed \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* consul \- when state\=absent\, the options script\, ttl\, tcp\, http\, and interval can no longer be specified \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* gconftool2 \- state\=get has been removed\. Use the module community\.general\.gconftool2\_info instead \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* gitlab\_runner \- remove the default value for the access\_level option\. To restore the previous behavior\, explicitly set it to ref\_protected \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* htpasswd \- removed code for passlib \<1\.6 \([https\://github\.com/ansible\-collections/community\.general/pull/6901](https\://github\.com/ansible\-collections/community\.general/pull/6901)\)\. -* manageiq\_polices \- state\=list has been removed\. Use the module community\.general\.manageiq\_policies\_info instead \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* manageiq\_tags \- state\=list has been removed\. Use the module community\.general\.manageiq\_tags\_info instead \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* mh\.mixins\.cmd module utils \- the ArgFormat class has been removed \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* mh\.mixins\.cmd module utils \- the CmdMixin mixin has been removed\. Use community\.general\.plugins\.module\_utils\.cmd\_runner\.CmdRunner instead \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* mh\.mixins\.cmd module utils \- the mh\.mixins\.cmd module utils has been removed after all its contents were removed \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* mh\.module\_helper module utils \- the CmdModuleHelper and CmdStateModuleHelper classes have been removed\. Use community\.general\.plugins\.module\_utils\.cmd\_runner\.CmdRunner instead \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. -* proxmox module utils \- removed unused imports \([https\://github\.com/ansible\-collections/community\.general/pull/6873](https\://github\.com/ansible\-collections/community\.general/pull/6873)\)\. -* xfconf \- the deprecated disable\_facts option was removed \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\. - - -#### community\.hashi\_vault - -* The minimum supported version of ansible\-core is now 2\.14\, support for 2\.13 has been dropped \([https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/403](https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/403)\)\. - - -#### community\.vmware - -* Removed module util version \([https\://github\.com/ansible\-collections/community\.vmware/issues/1639](https\://github\.com/ansible\-collections/community\.vmware/issues/1639)\)\. -* vmware\_guest \- removed specifying CDROM configuration as a dict\, instead use a list \([https\://github\.com/ansible\-collections/community\.vmware/issues/1472](https\://github\.com/ansible\-collections/community\.vmware/issues/1472)\)\. -* vmware\_host\_lockdown \- removed deprecated states absent and present \([https\://github\.com/ansible\-collections/community\.vmware/issues/1517](https\://github\.com/ansible\-collections/community\.vmware/issues/1517)\)\. -* vmware\_rest\_client \- removed deprecated method get\_tag\_by\_category\(\) \([https\://github\.com/ansible\-collections/community\.vmware/issues/1898](https\://github\.com/ansible\-collections/community\.vmware/issues/1898)\)\. - - -#### community\.windows - -* Removed testing for Server 2012 and Server 2012 R2 as they are reaching End of Life status from Microsoft\. These OS versions may continue to work but will not be tested in CI\. -* win\_nssm \- Removed the deprecated module option app\_parameters\, use arguments instead\. -* win\_psmodule \- Removed the deprecated module option url\, use community\.windows\.win\_psrepository to manage repositories instead -* win\_psmodule \- Will no longer remove the repository specified when state\: absent\, use community\.windows\.win\_psrepository to manage repositories instead -* win\_scheduled\_tasks \- Removed support for a trigger repetition to be defined as a list of dictionary entries\. Specify the repetition as a dictionary value rather than a list of dictionaries\. - - -#### dellemc\.openmanage - -* The dellemc\_get\_firmware\_inventory module is removed and replaced with the module idrac\_firmware\_info\. -* The dellemc\_get\_system\_inventory module is removed and replaced with the module idrac\_system\_info\. - - -#### hetzner\.hcloud - -* hcloud\_datacenter\_facts Removed deprecated facts module -* hcloud\_floating\_ip\_facts Removed deprecated facts module -* hcloud\_image\_facts Removed deprecated facts module -* hcloud\_location\_facts Removed deprecated facts module -* hcloud\_server\_facts Removed deprecated facts module -* hcloud\_server\_type\_facts Removed deprecated facts module -* hcloud\_ssh\_key\_facts Removed deprecated facts module -* hcloud\_volume\_facts Removed deprecated facts module - - -### Security Fixes - - -#### Ansible\-core - -* ansible\-galaxy \- Prevent roles from using symlinks to overwrite files outside of the installation directory \(CVE\-2023\-5115\) - - -### Bugfixes - - -#### Ansible\-core - -* Allow for searching handler subdir for included task via include\_role \([https\://github\.com/ansible/ansible/issues/81722](https\://github\.com/ansible/ansible/issues/81722)\) -* AnsibleModule\.run\_command \- Only use selectors when needed\, and rely on Python stdlib subprocess for the simple task of collecting stdout/stderr when prompt matching is not required\. -* Cache host\_group\_vars after instantiating it once and limit the amount of repetitive work it needs to do every time it runs\. -* Call PluginLoader\.all\(\) once for vars plugins\, and load vars plugins that run automatically or are enabled specifically by name subsequently\. -* Display \- Defensively configure writing to stdout and stderr with a custom encoding error handler that will replace invalid characters while providing a deprecation warning that non\-utf8 text will result in an error in a future version\. -* Exclude internal options from man pages and docs\. -* Fix ansible\-config init man page option indentation\. -* Fix ast deprecation warnings for Str and value\.s when using Python 3\.12\. -* Fix run\_once being incorrectly interpreted on handlers \([https\://github\.com/ansible/ansible/issues/81666](https\://github\.com/ansible/ansible/issues/81666)\) -* Fix exceptions caused by various inputs when performing arg splitting or parsing key/value pairs\. Resolves issue [https\://github\.com/ansible/ansible/issues/46379](https\://github\.com/ansible/ansible/issues/46379) and issue [https\://github\.com/ansible/ansible/issues/61497](https\://github\.com/ansible/ansible/issues/61497) -* Fix incorrect parsing of multi\-line Jinja2 blocks when performing arg splitting or parsing key/value pairs\. -* Fix post\-validating looped task fields so the strategy uses the correct values after task execution\. -* Fixed pip module failure in case of usage quotes for virtualenv\_command option for the venv command\. \([https\://github\.com/ansible/ansible/issues/76372](https\://github\.com/ansible/ansible/issues/76372)\) -* From issue [https\://github\.com/ansible/ansible/issues/80880](https\://github\.com/ansible/ansible/issues/80880)\, when notifying a handler from another handler\, handler notifications must be registered immediately as the flush\_handler call is not recursive\. -* Import FILE\_ATTRIBUTES from ansible\.module\_utils\.common\.file in ansible\.module\_utils\.basic instead of defining it twice\. -* Inventory scripts parser not treat exception when getting hostsvar \([https\://github\.com/ansible/ansible/issues/81103](https\://github\.com/ansible/ansible/issues/81103)\) -* On Python 3 use datetime methods fromtimestamp and now with UTC timezone instead of utcfromtimestamp and utcnow\, which are deprecated in Python 3\.12\. -* PluginLoader \- fix Jinja plugin performance issues \([https\://github\.com/ansible/ansible/issues/79652](https\://github\.com/ansible/ansible/issues/79652)\) -* PowerShell \- Remove some code which is no longer valid for dotnet 5\+ -* Prevent running same handler multiple times when included via include\_role \([https\://github\.com/ansible/ansible/issues/73643](https\://github\.com/ansible/ansible/issues/73643)\) -* Prompting \- add a short sleep between polling for user input to reduce CPU consumption \([https\://github\.com/ansible/ansible/issues/81516](https\://github\.com/ansible/ansible/issues/81516)\)\. -* Properly disable jinja2\_native in the template module when jinja2 override is used in the template \([https\://github\.com/ansible/ansible/issues/80605](https\://github\.com/ansible/ansible/issues/80605)\) -* Properly template tags in parent blocks \([https\://github\.com/ansible/ansible/issues/81053](https\://github\.com/ansible/ansible/issues/81053)\) -* Remove unreachable parser error for removed static parameter of include\_role -* Replace uses of configparser\.ConfigParser\.readfp\(\) which was removed in Python 3\.12 with configparser\.ConfigParser\.read\_file\(\) \([https\://github\.com/ansible/ansible/issues/81656](https\://github\.com/ansible/ansible/issues/81656)\) -* Set filters intersect\, difference\, symmetric\_difference and union now always return a list\, never a set\. Previously\, a set would be returned if the inputs were a hashable type such as str\, instead of a collection\, such as a list or tuple\. -* Set filters intersect\, difference\, symmetric\_difference and union now use set operations when the given items are hashable\. Previously\, list operations were performed unless the inputs were a hashable type such as str\, instead of a collection\, such as a list or tuple\. -* Switch result queue from a multiprocessing\.queues\.Queue\` to \`\`multiprocessing\.queues\.SimpleQueue\, primarily to allow properly handling pickling errors\, to prevent an infinite hang waiting for task results -* The ansible\-config init command now has a documentation description\. -* The ansible\-galaxy collection download command now has a documentation description\. -* The ansible\-galaxy collection install command documentation is now visible \(previously hidden by a decorator\)\. -* The ansible\-galaxy collection verify command now has a documentation description\. -* The ansible\-galaxy role install command documentation is now visible \(previously hidden by a decorator\)\. -* The ansible\-inventory command command now has a documentation description \(previously used as the epilog\)\. -* The hostname module now also updates both current and permanent hostname on OpenBSD\. Before it only updated the permanent hostname \([https\://github\.com/ansible/ansible/issues/80520](https\://github\.com/ansible/ansible/issues/80520)\)\. -* Update module\_utils\.urls unit test to work with cryptography \>\= 41\.0\.0\. -* When generating man pages\, use func to find the command function instead of looking it up by the command name\. -* StrategyBase\.\_process\_pending\_results \- create a Templar on demand for templating changed\_when/failed\_when\. -* ansible\-galaxy now considers all collection paths when identifying which collection requirements are already installed\. Use the COLLECTIONS\_PATHS and COLLECTIONS\_SCAN\_SYS\_PATHS config options to modify these\. Previously only the install path was considered when resolving the candidates\. The install path will remain the only one potentially modified\. \([https\://github\.com/ansible/ansible/issues/79767](https\://github\.com/ansible/ansible/issues/79767)\, [https\://github\.com/ansible/ansible/issues/81163](https\://github\.com/ansible/ansible/issues/81163)\) -* ansible\.module\_utils\.service \- ensure binary data transmission in daemonize\(\) -* ansible\.module\_utils\.service \- fix inter\-process communication in daemonize\(\) -* import\_role reverts to previous behavior of exporting vars at compile time\. -* pkg\_mgr \- fix the default dnf version detection -* ansiballz \- Prevent issue where the time on the control host could change part way through building the ansiballz file\, potentially causing a pre\-1980 date to be used during ansiballz unpacking leading to a zip file error \([https\://github\.com/ansible/ansible/issues/80089](https\://github\.com/ansible/ansible/issues/80089)\) -* ansible terminal color settings were incorrectly limited to 16 options via \'choices\'\, removing so all 256 can be accessed\. -* ansible\-console \- fix filtering by collection names when a collection search path was set \([https\://github\.com/ansible/ansible/pull/81450](https\://github\.com/ansible/ansible/pull/81450)\)\. -* ansible\-galaxy \- Enabled the data tarfile filter during role installation for Python versions that support it\. A probing mechanism is used to avoid Python versions with a broken implementation\. -* ansible\-galaxy \- Fix issue installing collections containing directories with more than 100 characters on python versions before 3\.10\.6 -* ansible\-galaxy \- Fix variable type error when installing subdir collections \([https\://github\.com/ansible/ansible/issues/80943](https\://github\.com/ansible/ansible/issues/80943)\) -* ansible\-galaxy \- Provide a better error message when using a requirements file with an invalid format \- [https\://github\.com/ansible/ansible/issues/81901](https\://github\.com/ansible/ansible/issues/81901) -* ansible\-galaxy \- fix installing collections from directories that have a trailing path separator \([https\://github\.com/ansible/ansible/issues/77803](https\://github\.com/ansible/ansible/issues/77803)\)\. -* ansible\-galaxy \- fix installing signed collections \([https\://github\.com/ansible/ansible/issues/80648](https\://github\.com/ansible/ansible/issues/80648)\)\. -* ansible\-galaxy \- reduce API calls to servers by fetching signatures only for final candidates\. -* ansible\-galaxy \- started allowing the use of pre\-releases for collections that do not have any stable versions published\. \([https\://github\.com/ansible/ansible/pull/81606](https\://github\.com/ansible/ansible/pull/81606)\) -* ansible\-galaxy \- started allowing the use of pre\-releases for dependencies on any level of the dependency tree that specifically demand exact pre\-release versions of collections and not version ranges\. \([https\://github\.com/ansible/ansible/pull/81606](https\://github\.com/ansible/ansible/pull/81606)\) -* ansible\-galaxy collection verify \- fix verifying signed collections when the keyring is not configured\. -* ansible\-galaxy info \- fix reporting no role found when lookup\_role\_by\_name returns None\. -* ansible\-inventory \- index available\_hosts for major performance boost when dumping large inventories -* ansible\-test \- Add a pylint plugin to work around a known issue on Python 3\.12\. -* ansible\-test \- Add support for argcomplete version 3\. -* ansible\-test \- All containers created by ansible\-test now include the current test session ID in their name\. This avoids conflicts between concurrent ansible\-test invocations using the same container host\. -* ansible\-test \- Always use ansible\-test managed entry points for ansible\-core CLI tools when not running from source\. This fixes issues where CLI entry points created during install are not compatible with ansible\-test\. -* ansible\-test \- Fix a traceback that occurs when attempting to test Ansible source using a different ansible\-test\. A clear error message is now given when this scenario occurs\. -* ansible\-test \- Fix handling of timeouts exceeding one day\. -* ansible\-test \- Fix parsing of cgroup entries which contain a \: in the path \([https\://github\.com/ansible/ansible/issues/81977](https\://github\.com/ansible/ansible/issues/81977)\)\. -* ansible\-test \- Fix several possible tracebacks when using the \-e option with sanity tests\. -* ansible\-test \- Fix various cases where the test timeout could expire without terminating the tests\. -* ansible\-test \- Include missing pylint requirements for Python 3\.10\. -* ansible\-test \- Pre\-build a PyYAML wheel before installing requirements to avoid a potential Cython build failure\. -* ansible\-test \- Remove redundant warning about missing programs before attempting to execute them\. -* ansible\-test \- The import sanity test now checks the collection loader for remote\-only Python support when testing ansible\-core\. -* ansible\-test \- Unit tests now report warnings generated during test runs\. Previously only warnings generated during test collection were reported\. -* ansible\-test \- Update pylint to 2\.17\.2 to resolve several possible false positives\. -* ansible\-test \- Update pylint to 2\.17\.3 to resolve several possible false positives\. -* ansible\-test \- Update pylint to version 3\.0\.1\. -* ansible\-test \- Use raise \.\.\. from \.\.\. when raising exceptions from within an exception handler\. -* ansible\-test \- When bootstrapping remote FreeBSD instances\, use the OS packaged setuptools instead of installing the latest version from PyPI\. -* ansible\-test local change detection \- use git merge\-base \ HEAD instead of git merge\-base \-\-fork\-point \ \([https\://github\.com/ansible/ansible/pull/79734](https\://github\.com/ansible/ansible/pull/79734)\)\. -* ansible\-vault \- fail when the destination file location is not writable before performing encryption \([https\://github\.com/ansible/ansible/issues/81455](https\://github\.com/ansible/ansible/issues/81455)\)\. -* apt \- ignore fail\_on\_autoremove and allow\_downgrade parameters when using aptitude \([https\://github\.com/ansible/ansible/issues/77868](https\://github\.com/ansible/ansible/issues/77868)\)\. -* blockinfile \- avoid crash with Python 3 if creating the directory fails when create\=true \([https\://github\.com/ansible/ansible/pull/81662](https\://github\.com/ansible/ansible/pull/81662)\)\. -* connection timeouts defined in ansible\.cfg will now be properly used\, the \-\-timeout cli option was obscuring them by always being set\. -* copy \- print correct destination filename when using content and \-\-diff \([https\://github\.com/ansible/ansible/issues/79749](https\://github\.com/ansible/ansible/issues/79749)\)\. -* copy unit tests \- Fixing \"dir all perms\" documentation and formatting for easier reading\. -* core will now also look at the connection plugin to force \'local\' interpreter for networking path compatibility as just ansible\_network\_os could be misleading\. -* deb822\_repository \- use http\-agent for receiving content \([https\://github\.com/ansible/ansible/issues/80809](https\://github\.com/ansible/ansible/issues/80809)\)\. -* debconf \- idempotency in questions with type \'password\' \([https\://github\.com/ansible/ansible/issues/47676](https\://github\.com/ansible/ansible/issues/47676)\)\. -* distribution facts \- fix Source Mage family mapping -* dnf \- fix a failure when a package from URI was specified and update\_only was set \([https\://github\.com/ansible/ansible/issues/81376](https\://github\.com/ansible/ansible/issues/81376)\)\. -* dnf5 \- Update dnf5 module to handle API change for setting the download directory \([https\://github\.com/ansible/ansible/issues/80887](https\://github\.com/ansible/ansible/issues/80887)\) -* dnf5 \- Use transaction\.check\_gpg\_signatures API call to check package signatures AND possibly to recover from when keys are missing\. -* dnf5 \- fix module and package names in the message following failed module respawn attempt -* dnf5 \- use the logs API to determine transaction problems -* dpkg\_selections \- check if the package exists before performing the selection operation \([https\://github\.com/ansible/ansible/issues/81404](https\://github\.com/ansible/ansible/issues/81404)\)\. -* encrypt \- deprecate passlib\_or\_crypt API \([https\://github\.com/ansible/ansible/issues/55839](https\://github\.com/ansible/ansible/issues/55839)\)\. -* fetch \- Handle unreachable errors properly \([https\://github\.com/ansible/ansible/issues/27816](https\://github\.com/ansible/ansible/issues/27816)\) -* file modules \- Make symbolic modes with X use the computed permission\, not original file \([https\://github\.com/ansible/ansible/issues/80128](https\://github\.com/ansible/ansible/issues/80128)\) -* file modules \- fix validating invalid symbolic modes\. -* first found lookup has been updated to use the normalized argument parsing \(pythonic\) matching the documented examples\. -* first found lookup\, fixed an issue with subsequent items clobbering information from previous ones\. -* first\_found lookup now gets \'untemplated\' loop entries and handles templating itself as task\_executor was removing even \'templatable\' entries and breaking functionality\. [https\://github\.com/ansible/ansible/issues/70772](https\://github\.com/ansible/ansible/issues/70772) -* galaxy \- check if the target for symlink exists \([https\://github\.com/ansible/ansible/pull/81586](https\://github\.com/ansible/ansible/pull/81586)\)\. -* galaxy \- cross check the collection type and collection source \([https\://github\.com/ansible/ansible/issues/79463](https\://github\.com/ansible/ansible/issues/79463)\)\. -* gather\_facts parallel option was doing the reverse of what was stated\, now it does run modules in parallel when True and serially when False\. -* handlers \- fix v2\_playbook\_on\_notify callback not being called when notifying handlers -* handlers \- the listen keyword can affect only one handler with the same name\, the last one defined as it is a case with the notify keyword \([https\://github\.com/ansible/ansible/issues/81013](https\://github\.com/ansible/ansible/issues/81013)\) -* include\_role \- expose variables from parent roles to role\'s handlers \([https\://github\.com/ansible/ansible/issues/80459](https\://github\.com/ansible/ansible/issues/80459)\) -* inventory\_ini \- handle SyntaxWarning while parsing ini file in inventory \([https\://github\.com/ansible/ansible/issues/81457](https\://github\.com/ansible/ansible/issues/81457)\)\. -* iptables \- remove default rule creation when creating iptables chain to be more similar to the command line utility \([https\://github\.com/ansible/ansible/issues/80256](https\://github\.com/ansible/ansible/issues/80256)\)\. -* lib/ansible/utils/encrypt\.py \- remove unused private \_LOCK \([https\://github\.com/ansible/ansible/issues/81613](https\://github\.com/ansible/ansible/issues/81613)\) -* lookup/url\.py \- Fix incorrect var/env/ini entry for force\_basic\_auth -* man page build \- Remove the dependency on the docs directory for building man pages\. -* man page build \- Sub commands of ansible\-galaxy role and ansible\-galaxy collection are now documented\. -* module responses \- Ensure that module responses are utf\-8 adhereing to JSON RFC and expectations of the core code\. -* module/role argument spec \- validate the type for options that are None when the option is required or has a non\-None default \([https\://github\.com/ansible/ansible/issues/79656](https\://github\.com/ansible/ansible/issues/79656)\)\. -* modules/user\.py \- Add check for valid directory when creating new user homedir \(allows /dev/null as skeleton\) \([https\://github\.com/ansible/ansible/issues/75063](https\://github\.com/ansible/ansible/issues/75063)\) -* paramiko\_ssh\, psrp\, and ssh connection plugins \- ensure that all values for options that should be strings are actually converted to strings \([https\://github\.com/ansible/ansible/pull/81029](https\://github\.com/ansible/ansible/pull/81029)\)\. -* password\_hash \- fix salt format for crypt \(only used if passlib is not installed\) for the bcrypt algorithm\. -* pep517 build backend \- Copy symlinks when copying the source tree\. This avoids tracebacks in various scenarios\, such as when a venv is present in the source tree\. -* pep517 build backend \- Use the documented import\_module import from importlib\. -* pip module \- Update module to prefer use of the python packaging and importlib\.metadata modules due to pkg\_resources being deprecated \([https\://github\.com/ansible/ansible/issues/80488](https\://github\.com/ansible/ansible/issues/80488)\) -* pkg\_mgr\.py \- Fix ansible\_pkg\_mgr incorrect in TencentOS Server Linux -* pkg\_mgr\.py \- Fix ansible\_pkg\_mgr is unknown in Kylin Linux \([https\://github\.com/ansible/ansible/issues/81332](https\://github\.com/ansible/ansible/issues/81332)\) -* powershell modules \- Only set an rc of 1 if the PowerShell pipeline signaled an error occurred AND there are error records present\. Previously it would do so only if the error signal was present without checking the error count\. -* replace \- handle exception when bad escape character is provided in replace \([https\://github\.com/ansible/ansible/issues/79364](https\://github\.com/ansible/ansible/issues/79364)\)\. -* role deduplication \- don\'t deduplicate before a role has had a task run for that particular host \([https\://github\.com/ansible/ansible/issues/81486](https\://github\.com/ansible/ansible/issues/81486)\)\. -* service module\, does not permanently configure flags flags on Openbsd when enabling/disabling a service\. -* service module\, enable/disable is not a exclusive action in checkmode anymore\. -* setup gather\_timeout \- Fix timeout in get\_mounts\_facts for linux\. -* setup module \(fact gathering\) will now try to be smarter about different versions of facter emitting error when \-\-puppet flag is used w/o puppet\. -* syntax check \- Limit \-\-syntax\-check to ansible\-playbook only\, as that is the only CLI affected by this argument \([https\://github\.com/ansible/ansible/issues/80506](https\://github\.com/ansible/ansible/issues/80506)\) -* tarfile \- handle data filter deprecation warning message for extract and extractall \([https\://github\.com/ansible/ansible/issues/80832](https\://github\.com/ansible/ansible/issues/80832)\)\. -* template \- Fix for formatting issues when a template path contains valid jinja/strftime pattern \(especially line break one\) and using the template path in ansible\_managed \([https\://github\.com/ansible/ansible/pull/79129](https\://github\.com/ansible/ansible/pull/79129)\) -* templating \- In the template action and lookup\, use local jinja2 environment overlay overrides instead of mutating the templars environment -* templating \- prevent setting arbitrary attributes on Jinja2 environments via Jinja2 overrides in templates -* templating escape and single var optimization now use correct delimiters when custom ones are provided either via task or template header\. -* unarchive \- fix unarchiving sources that are copied to the remote node using a relative temporory directory path \([https\://github\.com/ansible/ansible/issues/80710](https\://github\.com/ansible/ansible/issues/80710)\)\. -* uri \- fix search for JSON type to include complex strings containing \'\+\' -* uri/urls \- Add compat function to handle the ability to parse the filename from a Content\-Disposition header \([https\://github\.com/ansible/ansible/issues/81806](https\://github\.com/ansible/ansible/issues/81806)\) -* urls\.py \- fixed cert\_file and key\_file parameters when running on Python 3\.12 \- [https\://github\.com/ansible/ansible/issues/80490](https\://github\.com/ansible/ansible/issues/80490) -* user \- set expiration value correctly when unable to retrieve the current value from the system \([https\://github\.com/ansible/ansible/issues/71916](https\://github\.com/ansible/ansible/issues/71916)\) -* validate\-modules sanity test \- replace semantic markup parsing and validating code with the code from [antsibull\-docs\-parser 0\.2\.0](https\://github\.com/ansible\-community/antsibull\-docs\-parser/releases/tag/0\.2\.0) \([https\://github\.com/ansible/ansible/pull/80406](https\://github\.com/ansible/ansible/pull/80406)\)\. -* vars\_prompt \- internally convert the unsafe value to bool -* vault and unvault filters now properly take vault\_id parameter\. -* win\_fetch \- Add support for using file with wildcards in file name\. \([https\://github\.com/ansible/ansible/issues/73128](https\://github\.com/ansible/ansible/issues/73128)\) -* winrm \- Better handle send input failures when communicating with hosts under load - - -#### amazon\.aws - -* autoscaling\_group \- fix ValidationError when describing an autoscaling group that has more than 20 target groups attached to it by breaking the request into chunks \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1593](https\://github\.com/ansible\-collections/amazon\.aws/pull/1593)\)\. -* autoscaling\_group\_info \- fix ValidationError when describing an autoscaling group that has more than 20 target groups attached to it by breaking the request into chunks \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1593](https\://github\.com/ansible\-collections/amazon\.aws/pull/1593)\)\. -* aws\_ec2 inventory plugin \- fix NoRegionError when no regions are provided and region isn\'t specified \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1551](https\://github\.com/ansible\-collections/amazon\.aws/issues/1551)\)\. -* backup\_plan \- Use existing scrub\_none\_values function from module\_utils to remove None values from nested dicts in supplied params\. Nested None values were being retained and causing an error when sent through to the boto3 client operation \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1611](https\://github\.com/ansible\-collections/amazon\.aws/pull/1611)\)\. -* backup\_selection \- ensures that updating an existing selection will add new Conditions if there previously were not any \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1701](https\://github\.com/ansible\-collections/amazon\.aws/pull/1701)\)\. -* backup\_vault \- fix error when updating tags on a backup vault by using the correct boto3 client methods for tagging and untagging backup resources \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1610](https\://github\.com/ansible\-collections/amazon\.aws/pull/1610)\)\. -* cloudwatchevent\_rule \- Fixes changed status to report False when no change has been made\. The module had incorrectly always reported a change\. \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1589](https\://github\.com/ansible\-collections/amazon\.aws/pull/1589)\) -* ec2\_instance \- fix check\_mode issue when adding network interfaces \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1403](https\://github\.com/ansible\-collections/amazon\.aws/issues/1403)\)\. -* ec2\_instance \- retry API call if we get InvalidInstanceID\.NotFound error \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1650](https\://github\.com/ansible\-collections/amazon\.aws/pull/1650)\)\. -* ec2\_metadata\_facts \- Handle decompression when EC2 instance user\-data is gzip compressed\. The fetch\_url method from ansible\.module\_utils\.urls does not decompress the user\-data unless the header explicitly contains Content\-Encoding\: gzip \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1575](https\://github\.com/ansible\-collections/amazon\.aws/pull/1575)\)\. -* ec2\_vpc\_nat\_gateway \- adding a boolean parameter called default\_create to allow users to have the option to choose whether they want to display an error message or create a NAT gateway when an EIP address is not found\. The module \(ec2\_vpc\_nat\_gateway\) had incorrectly failed silently if EIP didn\'t exist \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1295](https\://github\.com/ansible\-collections/amazon\.aws/issues/1295)\)\. -* ec2\_vpc\_nat\_gateway \- fixes to nat gateway so that when the user creates a private NAT gateway\, an Elastic IP address should not be allocated\. The module had inncorrectly always allocate elastic IP address when creating private nat gateway \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1632](https\://github\.com/ansible\-collections/amazon\.aws/pull/1632)\)\. -* ec2\_vpc\_route\_table\_info \- default filters to empty dictionary \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1668](https\://github\.com/ansible\-collections/amazon\.aws/issues/1668)\)\. -* elb\_application\_lb \- fix missing attributes on creation of ALB\. The create\_or\_update\_alb\(\) was including ALB\-specific attributes when updating an existing ALB but not when creating a new ALB \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1510](https\://github\.com/ansible\-collections/amazon\.aws/issues/1510)\)\. -* elb\_application\_lb\_info \- ensure all API queries use the retry decorator \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1767](https\://github\.com/ansible\-collections/amazon\.aws/issues/1767)\)\. -* lambda\_execute \- Fixes to the stack trace output\, where it does not contain spaces between each character\. The module had incorrectly always outputted extra spaces between each character\. \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1615](https\://github\.com/ansible\-collections/amazon\.aws/pull/1615)\) -* module\_utils\.acm \- fixes list\_certificates returning only RSA\_2048 certificates \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1567](https\://github\.com/ansible\-collections/amazon\.aws/issues/1567)\)\. -* module\_utils\.backup \- get\_selection\_details fix empty list returned when multiple backup selections exist \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1633](https\://github\.com/ansible\-collections/amazon\.aws/pull/1633)\)\. -* rds\_cluster \- Add AllocatedStorage\, DBClusterInstanceClass\, StorageType\, Iops\, and EngineMode to the list of parameters that can be passed when creating or modifying a Multi\-AZ RDS cluster \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1657](https\://github\.com/ansible\-collections/amazon\.aws/pull/1657)\)\. -* rds\_cluster \- Allow to pass GlobalClusterIdentifier to rds cluster on creation \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1663](https\://github\.com/ansible\-collections/amazon\.aws/pull/1663)\)\. -* rds\_instance \- add support for CACertificateIdentifier to create/update rds instance \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1459](https\://github\.com/ansible\-collections/amazon\.aws/pull/1459)\)\. -* s3\_bucket \- fixes issue when deleting a bucket with unversioned objects \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1533](https\://github\.com/ansible\-collections/amazon\.aws/issues/1533)\)\. -* s3\_object \- fixed NoSuchTagSet error when S3 endpoint doesn\'t support tags \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1607](https\://github\.com/ansible\-collections/amazon\.aws/issues/1607)\)\. -* s3\_object \- fixes regression related to objects with a leading / \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1548](https\://github\.com/ansible\-collections/amazon\.aws/issues/1548)\)\. - - -#### ansible\.netcommon - -* Ensure that all connection plugin options that should be strings are actually strings \([https\://github\.com/ansible\-collections/ansible\.netcommon/pull/549](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/549)\)\. -* Fix attribute types from string to str in filter plugins\. -* Vendor telnetlib from cpython \([https\://github\.com/ansible\-collections/ansible\.netcommon/pull/546](https\://github\.com/ansible\-collections/ansible\.netcommon/pull/546)\) - - -#### ansible\.utils - -* Validate input for ipv4\_hex\([https\://github\.com/ansible\-collections/ansible\.utils/issues/281](https\://github\.com/ansible\-collections/ansible\.utils/issues/281)\) - - -#### ansible\.windows - -* Remove some code which is no longer valid for dotnet 5\+ -* win\_async \- Set maximum data size allowed when deserializing async output \- [https\://github\.com/ansible\-collections/ansible\.windows/pull/520](https\://github\.com/ansible\-collections/ansible\.windows/pull/520) -* win\_group\_membership \- Return accurate results when using check\_mode \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/532](https\://github\.com/ansible\-collections/ansible\.windows/issues/532) -* win\_updates \- Add retry mechanism when polling output in case file is locked by another process like an Anti Virus \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/490](https\://github\.com/ansible\-collections/ansible\.windows/issues/490) -* win\_updates \- Add special handling for KB2267602 in case it fails \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/530](https\://github\.com/ansible\-collections/ansible\.windows/issues/530) -* win\_updates \- Fix up endless retries when an update failed to install more than once \- [https\://github\.com/ansible\-collections/ansible\.windows/issues/343](https\://github\.com/ansible\-collections/ansible\.windows/issues/343) - - -#### arista\.eos - -* Fix command generated for local\-interface with in ntp server attribute\. -* Fix command generation for source\_interface attribute\. -* Fix secondary ip address parsing\. -* Skip compile testing for python \<3\.6\. -* fix line attribute fact generation and placement in ACE\, when ACE is not fully parsed\. -* fix sanity issues w\.r\.t python27 - - -#### check\_point\.mgmt - -* cp\_mgmt\_access\_rules \- split vpn param that can accept either a String or list of objects to two -* module\_utils/checkpoint\.py \- fixed compile issue \(Syntax Error\) on python 2\.7 - - -#### chocolatey\.chocolatey - -* win\-chocolatey \- unable to install packages if a license is already installed and chocolatey\.extension is not installed - - -#### cisco\.aci - -* Change input of prefix\_suppression to type string to allow enable\, disable and inherit options for aci\_interface\_policy\_ospf -* Fixed issue with default values for ssl\, proxy\, timeout in aci\.py and the display of host in the url when the plugin httpapi is used -* Modified aci\_rest and aci\_config\_snapshot modules to display the correct URL output string \(\#487\) - - -#### cisco\.ios - -* Fix invalid password length not being recognized by the error parser\. -* The regex looking for errors in the terminal output was matching anything with \'S\+ Error\:\'\. Caused issues with \'show runnning\-config\' if this string appeared in the output\. Updated the regex to require the \% anchor\. -* bgp\_address\_family \- fix deleted string with int concat issue in bgp\_address\_family\. -* ios\_acls \- Fix protocol\_options rendering corrects processing of overridden/ replaced state\. -* ios\_acls \- Fix standard acls rendering\. -* ios\_bgp\_address\_family \- fix rendering of remote\_as configuration with period\. -* ios\_facts \- Fix facts gathering when memory statistics head is not hexadecimal\. \([https\://github\.com/ansible\-collections/cisco\.ios/issues/776](https\://github\.com/ansible\-collections/cisco\.ios/issues/776)\) -* ios\_facts \- fix calculation of memory from bytes to megabytes\; grab correct output element for free memory \([https\://github\.com/ansible\-collections/cisco\.ios/issues/763](https\://github\.com/ansible\-collections/cisco\.ios/issues/763)\) -* ios\_l3\_interfaces \- account for secondary/primary when comparing ipv4 addresses\. \([https\://github\.com/ansible\-collections/cisco\.ios/issues/826](https\://github\.com/ansible\-collections/cisco\.ios/issues/826)\) -* ios\_lag\_interfaces \- Fix empty facts to be a list\. -* ios\_logging\_global \- fix configuration order to configure discriminator before buffer\. -* ios\_ospf\_interface \- Fix configuration rendering for ipv4 and ipv6 configurations\. -* ios\_ospf\_interface \- Fix replaced and overridden state\, action to negate superfluous configuration\. -* ios\_prefix\_lists \- fix deleted state to remove exisiting prefix lists from configuration\. -* ios\_service \- Put condition to add private\_config\_encryption in default services -* ios\_snmp\_server \- Add default versions to version 3 users\. -* ios\_snmp\_server \- Fixes error handling for snmp user when snmp agent is not enabled -* ios\_static\_routes \- Fix non vlan entries to have unique group identifier\. -* ios\_static\_routes \- Fix parsers to parse interface attribute correctly\. -* ospfv2 \- Fixed rendering of capability command with vrf\_lite\. -* ospfv3 \- Fixed rendering of capability command with vrf\_lite\. -* snmp\_server \- update module to get snmp\_server user configuration\. - - -#### cisco\.iosxr - -* Add support to delete specific static route entry\.\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/375](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/375)\) -* Fix issue in deletion of ospf\.\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/425](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/425)\) -* Fix issue in facts gathering for Interfaces RM\.\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/417](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/417)\) -* Fix issue in lacp and lldp\_global of local variable commands\. -* Fixing Bundle\-Ether/\-POS recognition for resource modules\. \([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/369](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/369)\) -* Support overridden state in bgp\_global\,lacp and lldp\_global module\.\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/386](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/386)\) -* acls \- Fix issue in replaced state of not replacing ace entries with remark action\. \([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/332](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/332)\) -* l2\_interfaces Fix issue in qvlan parsing\.\([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/403](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/403)\) -* l3\_interfaces \- Fix issue in gather state of not gathering management interface\. \([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/381](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/381)\) - - -#### cisco\.ise - -* Cannot get cisco\.ise\.active\_directory\_groups\_by\_domain\_info to work\. -* Cannot get cisco\.ise\.rest\_id\_store to work fixed\. -* System Certificate Update does not work but always reports Object already present temporary solution\. -* cisco\.ise\.mnt\_session\_active\_count\_info ise\_reponse is null fixed\. -* node\_deployment tasks fail because of timeout\, adding new collection param\. -* system\_certificate \- added support for none value in the used\_by param\. -* system\_certificate \- fixed get\_object\_by\_id response\. - - -#### cisco\.meraki - -* Adding condition to avoid error on exists on devices\. -* Bad naming networkId parameter in networks\_appliance\_traffic\_shaping\_custom\_performance\_classes\. -* Bad naming networkId parameter in networks\_appliance\_warm\_spare\_swap\. -* Bad naming networkId parameter in networks\_bind\. -* Bad naming networkId parameter in networks\_clients\_provision\. -* Bad naming networkId parameter in networks\_devices\_remove and networks\_devices\_claim\_vmx -* Bad naming networkId parameter in networks\_firmware\_upgrades\_rollbacks\. -* Bad naming networkId parameter in networks\_firmware\_upgrades\_staged\_events\_rollbacks\. -* Bad naming networkId parameter in networks\_mqtt\_brokers\. -* Bad naming networkId parameter in networks\_pii\_requests\_delete\. -* Bad naming networkId parameter in networks\_sm\_devices\_checkin\. -* Bad naming networkId parameter in networks\_sm\_devices\_fields\. -* Bad naming networkId parameter in networks\_sm\_devices\_lock\. -* Bad naming networkId parameter in networks\_sm\_devices\_modify\_tags\. -* Bad naming networkId parameter in networks\_sm\_devices\_move\. -* Bad naming networkId parameter in networks\_sm\_devices\_refresh\_details\. -* Bad naming networkId parameter in networks\_sm\_devices\_unenroll\. -* Bad naming networkId parameter in networks\_sm\_devices\_wipe\. -* Bad naming networkId parameter in networks\_sm\_user\_access\_devices\_delete\. -* Bad naming networkId parameter in networks\_split\. -* Bad naming networkId parameter in networks\_switch\_stacks\_add\. -* Bad naming networkId parameter in networks\_switch\_stacks\_remove\. -* Bad naming networkId parameter in networks\_unbind\. -* Devices module documentation fixed\. -* Meraki Compare Equality 2 added\. -* New condition added to Meraki Compare Equality\. -* Removing ignores\. -* Resolved the issue with link negotation at meraki\_ms\_switchport -* Returning requires\_ansible to 2\.9\.10 -* Returning requires\_ansible to \>\=2\.14\.0 -* Sanity fixes\. -* Updating collection docs link\. -* Updating documentation\, yml fixes \- Documentation Broken\. -* cisco\.meraki\.networks\_devices\_claim \- got an unexpected keyword argument \'network\_id\'\, bug with parameter naming\. -* cisco\.meraki\.organizations\_login\_security module will not update org api authentication \- fixing for look at organizations\_login\_security\. -* meraki\_devices \- Fix endpoints due to breaking change in Meraki API v1\.33 -* runtime updated requires\_ansible from 2\.9\.10 to \'\>\=2\.14\.0\'\. - - -#### cisco\.mso - -* Fix mso\_tenant\_site \"site not found\" issue on absent \(\#368\) - - -#### cisco\.nxos - -* acls \- Fix parsing error when ACE has a source port range \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/713](https\://github\.com/ansible\-collections/cisco\.nxos/issues/713)\)\. -* interfaces \- Re\-apply existing non\-default MTU when changing mode to L2 \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/730](https\://github\.com/ansible\-collections/cisco\.nxos/issues/730)\)\. -* l3\_interfaces \- Append tag when updating IP address with state replaced \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/678](https\://github\.com/ansible\-collections/cisco\.nxos/issues/678)\)\. -* lag\_interfaces \- Allow force option to be idempotent \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/742](https\://github\.com/ansible\-collections/cisco\.nxos/issues/742)\)\. -* ntp\_global \- Fix incorrect handling of prefer option \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/670](https\://github\.com/ansible\-collections/cisco\.nxos/issues/670)\)\. -* nxos\_acls \- fix parsing of ACE with named source/dest port range \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/763](https\://github\.com/ansible\-collections/cisco\.nxos/issues/763)\)\. -* nxos\_banner \- Add support for a custom multiline delimiter -* nxos\_facts \- Fix missing SVI facts \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/440](https\://github\.com/ansible\-collections/cisco\.nxos/issues/440)\)\. -* nxos\_static\_routes \- Prevent action states to generate terminal configuration command\. -* nxos\_static\_routes \- Update the delete operation of static routes to be similar to other platforms\. \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/666](https\://github\.com/ansible\-collections/cisco\.nxos/issues/666)\) -* snmp\_server \- fix host delete when authentication options are present \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/439](https\://github\.com/ansible\-collections/cisco\.nxos/issues/439)\)\. -* terminal \- attempt privilege escalation only when prompt does not end with \# -* vtp\_version \- allow VTP version 3 to be configured \([https\://github\.com/ansible\-collections/cisco\.nxos/issues/704](https\://github\.com/ansible\-collections/cisco\.nxos/issues/704)\)\. - - -#### cloud\.common - -* Ensure result is always defined in lookup plugins \([https\://github\.com/ansible\-collections/cloud\.common/pull/116/files](https\://github\.com/ansible\-collections/cloud\.common/pull/116/files)\)\. -* Fix lookup modules failing on Ansible 2\.15 \([https\://github\.com/ansible\-collections/cloud\.common/pull/130](https\://github\.com/ansible\-collections/cloud\.common/pull/130)\)\. - - -#### cloudscale\_ch\.cloud - -* Add missing modules to the \"cloudscale\_ch\.cloud\.cloudscale\" action group\. -* Remove outdated Ansible version requirement from the README\. - - -#### community\.aws - -* Remove apigateway and apigateway\_deployment from meta/runtime\.yml \([https\://github\.com/ansible\-collections/community\.aws/pull/1905](https\://github\.com/ansible\-collections/community\.aws/pull/1905)\)\. -* batch\_compute\_environment \- fixed incorrect handling of Gov Cloud ARNs in compute\_environment\_name parameter \([https\://github\.com/ansible\-collections/community\.aws/issues/1846](https\://github\.com/ansible\-collections/community\.aws/issues/1846)\)\. -* cloudfront\_distribution \- The origins recognises the s3 domains with region part now \([https\://github\.com/ansible\-collections/community\.aws/issues/1819](https\://github\.com/ansible\-collections/community\.aws/issues/1819)\)\. -* cloudfront\_distribution \- no longer crashes when waiting for completion of creation \([https\://github\.com/ansible\-collections/community\.aws/issues/255](https\://github\.com/ansible\-collections/community\.aws/issues/255)\)\. -* cloudfront\_distribution \- now honours the enabled setting \([https\://github\.com/ansible\-collections/community\.aws/issues/1823](https\://github\.com/ansible\-collections/community\.aws/issues/1823)\)\. -* dynamodb\_table \- secondary indexes are now created \([https\://github\.com/ansible\-collections/community\.aws/issues/1825](https\://github\.com/ansible\-collections/community\.aws/issues/1825)\)\. -* ec2\_launch\_template \- fixed incorrect handling of Gov Cloud ARNs in compute\_environment\_name parameter \([https\://github\.com/ansible\-collections/community\.aws/issues/1846](https\://github\.com/ansible\-collections/community\.aws/issues/1846)\)\. -* elasticache\_info \- remove hard coded use of aws partition \([https\://github\.com/ansible\-collections/community\.aws/issues/1846](https\://github\.com/ansible\-collections/community\.aws/issues/1846)\)\. -* iam\_role \- fixed incorrect rejection of Gov Cloud ARNs in boundary parameter \([https\://github\.com/ansible\-collections/community\.aws/issues/1846](https\://github\.com/ansible\-collections/community\.aws/issues/1846)\)\. -* mq\_broker \- ensure broker is created with tags when passed \([https\://github\.com/ansible\-collections/community\.aws/issues/1832](https\://github\.com/ansible\-collections/community\.aws/issues/1832)\)\. -* msk\_cluster \- remove hard coded use of aws partition \([https\://github\.com/ansible\-collections/community\.aws/issues/1846](https\://github\.com/ansible\-collections/community\.aws/issues/1846)\)\. -* opensearch \- Don\'t try to read a non existing key from the domain config \([https\://github\.com/ansible\-collections/community\.aws/pull/1910](https\://github\.com/ansible\-collections/community\.aws/pull/1910)\)\. -* redshift \- fixed hard coded use of aws partition \([https\://github\.com/ansible\-collections/community\.aws/issues/1846](https\://github\.com/ansible\-collections/community\.aws/issues/1846)\)\. - - -#### community\.ciscosmb - -* added Cisco device config guide to address issue -* added extra \"n\" to sending commands to address issue - - -#### community\.crypto - -* Fix PEM detection/identification to also accept random other lines before the line starting with \-\-\-\-\-BEGIN \([https\://github\.com/ansible\-collections/community\.crypto/issues/627](https\://github\.com/ansible\-collections/community\.crypto/issues/627)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/628](https\://github\.com/ansible\-collections/community\.crypto/pull/628)\)\. -* acme\_\* modules \- correctly handle error documents without type \([https\://github\.com/ansible\-collections/community\.crypto/issues/651](https\://github\.com/ansible\-collections/community\.crypto/issues/651)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/652](https\://github\.com/ansible\-collections/community\.crypto/pull/652)\)\. -* openssh\_cert\, openssh\_keypair \- the modules ignored return codes of ssh and ssh\-keygen in some cases \([https\://github\.com/ansible\-collections/community\.crypto/issues/645](https\://github\.com/ansible\-collections/community\.crypto/issues/645)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/646](https\://github\.com/ansible\-collections/community\.crypto/pull/646)\)\. -* openssh\_keypair \- fix comment updating for OpenSSH before 6\.5 \([https\://github\.com/ansible\-collections/community\.crypto/pull/646](https\://github\.com/ansible\-collections/community\.crypto/pull/646)\)\. -* openssl\_pkcs12 \- modify autodetect to not detect pyOpenSSL \>\= 23\.3\.0\, which removed PKCS\#12 support \([https\://github\.com/ansible\-collections/community\.crypto/pull/666](https\://github\.com/ansible\-collections/community\.crypto/pull/666)\)\. - - -#### community\.digitalocean - -* digital\_ocean\_domain \- fix all\_domains by using get\_paginated\_data to retrieve all of the domains in the account from the paginated domains api endpoint \([https\://github\.com/ansible\-collections/community\.digitalocean/pull/307](https\://github\.com/ansible\-collections/community\.digitalocean/pull/307)\)\. - - -#### community\.dns - -* HTTP module utils \- make compatible with ansible\-core 2\.17 \([https\://github\.com/ansible\-collections/community\.dns/pull/165](https\://github\.com/ansible\-collections/community\.dns/pull/165)\)\. -* Update Public Suffix List\. -* wait\_for\_txt\, resolver module utils \- improve error handling \([https\://github\.com/ansible\-collections/community\.dns/pull/158](https\://github\.com/ansible\-collections/community\.dns/pull/158)\)\. - - -#### community\.docker - -* docker\_swarm \- make init and join operations work again with Docker SDK for Python before 4\.0\.0 \([https\://github\.com/ansible\-collections/community\.docker/issues/695](https\://github\.com/ansible\-collections/community\.docker/issues/695)\, [https\://github\.com/ansible\-collections/community\.docker/pull/696](https\://github\.com/ansible\-collections/community\.docker/pull/696)\)\. -* docker\_swarm\_info \- if service\=true is used\, do not crash when a service without an endpoint spec is encountered \([https\://github\.com/ansible\-collections/community\.docker/issues/636](https\://github\.com/ansible\-collections/community\.docker/issues/636)\, [https\://github\.com/ansible\-collections/community\.docker/pull/637](https\://github\.com/ansible\-collections/community\.docker/pull/637)\)\. -* docker\_volume \- fix crash caused by accessing an empty dictionary\. The has\_different\_config\(\) was raising an AttributeError because the self\.existing\_volume\[\"Labels\"\] dictionary was None \([https\://github\.com/ansible\-collections/community\.docker/pull/702](https\://github\.com/ansible\-collections/community\.docker/pull/702)\)\. -* vendored Docker SDK for Python code \- cherry\-pick changes from the Docker SDK for Python code to align code\. These changes should not affect the parts used by the collection\'s code \([https\://github\.com/ansible\-collections/community\.docker/pull/694](https\://github\.com/ansible\-collections/community\.docker/pull/694)\)\. - - -#### community\.general - -* CmdRunner module utils \- does not attempt to resolve path if executable is a relative or absolute path \([https\://github\.com/ansible\-collections/community\.general/pull/7200](https\://github\.com/ansible\-collections/community\.general/pull/7200)\)\. -* MH DependencyMixin module utils \- deprecation notice was popping up for modules not using dependencies \([https\://github\.com/ansible\-collections/community\.general/pull/6644](https\://github\.com/ansible\-collections/community\.general/pull/6644)\, [https\://github\.com/ansible\-collections/community\.general/issues/6639](https\://github\.com/ansible\-collections/community\.general/issues/6639)\)\. -* bitwarden lookup plugin \- the plugin made assumptions about the structure of a Bitwarden JSON object which may have been broken by an update in the Bitwarden API\. Remove assumptions\, and allow queries for general fields such as notes \([https\://github\.com/ansible\-collections/community\.general/pull/7061](https\://github\.com/ansible\-collections/community\.general/pull/7061)\)\. -* cmd\_runner module utils \- when a parameter in argument\_spec has no type\, meaning it is implicitly a str\, CmdRunner would fail trying to find the type key in that dictionary \([https\://github\.com/ansible\-collections/community\.general/pull/6968](https\://github\.com/ansible\-collections/community\.general/pull/6968)\)\. -* cobbler inventory plugin \- fix calculation of cobbler\_ipv4/6\_address \([https\://github\.com/ansible\-collections/community\.general/pull/6925](https\://github\.com/ansible\-collections/community\.general/pull/6925)\)\. -* composer \- fix impossible to run working\_dir dependent commands\. The module was throwing an error when trying to run a working\_dir dependent command\, because it tried to get the command help without passing the working\_dir \([https\://github\.com/ansible\-collections/community\.general/issues/3787](https\://github\.com/ansible\-collections/community\.general/issues/3787)\)\. -* csv module utils \- detects and remove unicode BOM markers from incoming CSV content \([https\://github\.com/ansible\-collections/community\.general/pull/6662](https\://github\.com/ansible\-collections/community\.general/pull/6662)\)\. -* datadog\_downtime \- presence of rrule param lead to the Datadog API returning Bad Request due to a missing recurrence type \([https\://github\.com/ansible\-collections/community\.general/pull/6811](https\://github\.com/ansible\-collections/community\.general/pull/6811)\)\. -* ejabberd\_user \- module was failing to detect whether user was already created and/or password was changed \([https\://github\.com/ansible\-collections/community\.general/pull/7033](https\://github\.com/ansible\-collections/community\.general/pull/7033)\)\. -* ejabberd\_user \- provide meaningful error message when the ejabberdctl command is not found \([https\://github\.com/ansible\-collections/community\.general/pull/7028](https\://github\.com/ansible\-collections/community\.general/pull/7028)\, [https\://github\.com/ansible\-collections/community\.general/issues/6949](https\://github\.com/ansible\-collections/community\.general/issues/6949)\)\. -* github\_deploy\_key \- fix pagination behaviour causing a crash when only a single page of deploy keys exist \([https\://github\.com/ansible\-collections/community\.general/pull/7375](https\://github\.com/ansible\-collections/community\.general/pull/7375)\)\. -* gitlab\_group \- the module passed parameters to the API call even when not set\. The module is now filtering out None values to remediate this \([https\://github\.com/ansible\-collections/community\.general/pull/6712](https\://github\.com/ansible\-collections/community\.general/pull/6712)\)\. -* gitlab\_group\_members \- fix gitlab constants call in gitlab\_group\_members module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. -* gitlab\_group\_variable \- deleted all variables when used with purge\=true due to missing raw property in KNOWN attributes \([https\://github\.com/ansible\-collections/community\.general/issues/7250](https\://github\.com/ansible\-collections/community\.general/issues/7250)\)\. -* gitlab\_project\_members \- fix gitlab constants call in gitlab\_project\_members module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. -* gitlab\_project\_variable \- deleted all variables when used with purge\=true due to missing raw property in KNOWN attributes \([https\://github\.com/ansible\-collections/community\.general/issues/7250](https\://github\.com/ansible\-collections/community\.general/issues/7250)\)\. -* gitlab\_protected\_branches \- fix gitlab constants call in gitlab\_protected\_branches module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. -* gitlab\_user \- fix gitlab constants call in gitlab\_user module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\. -* icinga2\_host \- fix a key error when updating an existing host \([https\://github\.com/ansible\-collections/community\.general/pull/6748](https\://github\.com/ansible\-collections/community\.general/pull/6748)\)\. -* ini\_file \- add the follow paramter to follow the symlinks instead of replacing them \([https\://github\.com/ansible\-collections/community\.general/pull/6546](https\://github\.com/ansible\-collections/community\.general/pull/6546)\)\. -* ini\_file \- fix a bug where the inactive options were not used when possible \([https\://github\.com/ansible\-collections/community\.general/pull/6575](https\://github\.com/ansible\-collections/community\.general/pull/6575)\)\. -* ipa\_dnszone \- fix \'idnsallowsyncptr\' key error for reverse zone \([https\://github\.com/ansible\-collections/community\.general/pull/6906](https\://github\.com/ansible\-collections/community\.general/pull/6906)\, [https\://github\.com/ansible\-collections/community\.general/issues/6905](https\://github\.com/ansible\-collections/community\.general/issues/6905)\)\. -* kernel\_blacklist \- simplified the mechanism to update the file\, fixing the error \([https\://github\.com/ansible\-collections/community\.general/pull/7382](https\://github\.com/ansible\-collections/community\.general/pull/7382)\, [https\://github\.com/ansible\-collections/community\.general/issues/7362](https\://github\.com/ansible\-collections/community\.general/issues/7362)\)\. -* keycloak module util \- fix missing http\_agent\, timeout\, and validate\_certs open\_url\(\) parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7067](https\://github\.com/ansible\-collections/community\.general/pull/7067)\)\. -* keycloak module utils \- fix is\_struct\_included handling of lists of lists/dictionaries \([https\://github\.com/ansible\-collections/community\.general/pull/6688](https\://github\.com/ansible\-collections/community\.general/pull/6688)\)\. -* keycloak module utils \- the function get\_user\_by\_username now return the user representation or None as stated in the documentation \([https\://github\.com/ansible\-collections/community\.general/pull/6758](https\://github\.com/ansible\-collections/community\.general/pull/6758)\)\. -* keycloak\_authentication \- fix Keycloak authentication flow \(step or sub\-flow\) indexing during update\, if not specified by the user \([https\://github\.com/ansible\-collections/community\.general/pull/6734](https\://github\.com/ansible\-collections/community\.general/pull/6734)\)\. -* keycloak\_client inventory plugin \- fix missing client secret \([https\://github\.com/ansible\-collections/community\.general/pull/6931](https\://github\.com/ansible\-collections/community\.general/pull/6931)\)\. -* ldap\_search \- fix string normalization and the base64\_attributes option on Python 3 \([https\://github\.com/ansible\-collections/community\.general/issues/5704](https\://github\.com/ansible\-collections/community\.general/issues/5704)\, [https\://github\.com/ansible\-collections/community\.general/pull/7264](https\://github\.com/ansible\-collections/community\.general/pull/7264)\)\. -* locale\_gen \- now works for locales without the underscore character such as C\.UTF\-8 \([https\://github\.com/ansible\-collections/community\.general/pull/6774](https\://github\.com/ansible\-collections/community\.general/pull/6774)\, [https\://github\.com/ansible\-collections/community\.general/issues/5142](https\://github\.com/ansible\-collections/community\.general/issues/5142)\, [https\://github\.com/ansible\-collections/community\.general/issues/4305](https\://github\.com/ansible\-collections/community\.general/issues/4305)\)\. -* lvol \- add support for percentage of origin size specification when creating snapshot volumes \([https\://github\.com/ansible\-collections/community\.general/issues/1630](https\://github\.com/ansible\-collections/community\.general/issues/1630)\, [https\://github\.com/ansible\-collections/community\.general/pull/7053](https\://github\.com/ansible\-collections/community\.general/pull/7053)\)\. -* lxc connection plugin \- now handles remote\_addr defaulting to inventory\_hostname correctly \([https\://github\.com/ansible\-collections/community\.general/pull/7104](https\://github\.com/ansible\-collections/community\.general/pull/7104)\)\. -* lxc connection plugin \- properly evaluate options \([https\://github\.com/ansible\-collections/community\.general/pull/7369](https\://github\.com/ansible\-collections/community\.general/pull/7369)\)\. -* machinectl become plugin \- mark plugin as require\_tty to automatically disable pipelining\, with which this plugin is not compatible \([https\://github\.com/ansible\-collections/community\.general/issues/6932](https\://github\.com/ansible\-collections/community\.general/issues/6932)\, [https\://github\.com/ansible\-collections/community\.general/pull/6935](https\://github\.com/ansible\-collections/community\.general/pull/6935)\)\. -* mail \- skip headers containing equals characters due to missing maxsplit on header key/value parsing \([https\://github\.com/ansible\-collections/community\.general/pull/7303](https\://github\.com/ansible\-collections/community\.general/pull/7303)\)\. -* memset module utils \- make compatible with ansible\-core 2\.17 \([https\://github\.com/ansible\-collections/community\.general/pull/7379](https\://github\.com/ansible\-collections/community\.general/pull/7379)\)\. -* nmap inventory plugin \- fix get\_option calls \([https\://github\.com/ansible\-collections/community\.general/pull/7323](https\://github\.com/ansible\-collections/community\.general/pull/7323)\)\. -* nmap inventory plugin \- now uses get\_option in all cases to get its configuration information \([https\://github\.com/ansible\-collections/community\.general/pull/7119](https\://github\.com/ansible\-collections/community\.general/pull/7119)\)\. -* nmcli \- fix bond option xmit\_hash\_policy \([https\://github\.com/ansible\-collections/community\.general/pull/6527](https\://github\.com/ansible\-collections/community\.general/pull/6527)\)\. -* nmcli \- fix support for empty list \(in compare and scrape\) \([https\://github\.com/ansible\-collections/community\.general/pull/6769](https\://github\.com/ansible\-collections/community\.general/pull/6769)\)\. -* nsupdate \- fix a possible list index out of range exception \([https\://github\.com/ansible\-collections/community\.general/issues/836](https\://github\.com/ansible\-collections/community\.general/issues/836)\)\. -* ocapi\_utils\, oci\_utils\, redfish\_utils module utils \- replace type\(\) calls with isinstance\(\) calls \([https\://github\.com/ansible\-collections/community\.general/pull/7501](https\://github\.com/ansible\-collections/community\.general/pull/7501)\)\. -* oci\_utils module util \- fix inappropriate logical comparison expressions and makes them simpler\. The previous checks had logical short circuits \([https\://github\.com/ansible\-collections/community\.general/pull/7125](https\://github\.com/ansible\-collections/community\.general/pull/7125)\)\. -* oci\_utils module utils \- avoid direct type comparisons \([https\://github\.com/ansible\-collections/community\.general/pull/7085](https\://github\.com/ansible\-collections/community\.general/pull/7085)\)\. -* onepassword \- fix KeyError exception when trying to access value of a field that is not filled out in OnePassword item \([https\://github\.com/ansible\-collections/community\.general/pull/7241](https\://github\.com/ansible\-collections/community\.general/pull/7241)\)\. -* openbsd\_pkg \- the pkg\_info\(1\) behavior has changed in OpenBSD \>7\.3\. The error message Can\'t find should not lead to an error case \([https\://github\.com/ansible\-collections/community\.general/pull/6785](https\://github\.com/ansible\-collections/community\.general/pull/6785)\)\. -* pacman \- module recognizes the output of yay running as root \([https\://github\.com/ansible\-collections/community\.general/pull/6713](https\://github\.com/ansible\-collections/community\.general/pull/6713)\)\. -* pipx module utils \- change the CLI argument formatter for the pip\_args parameter \([https\://github\.com/ansible\-collections/community\.general/issues/7497](https\://github\.com/ansible\-collections/community\.general/issues/7497)\, [https\://github\.com/ansible\-collections/community\.general/pull/7506](https\://github\.com/ansible\-collections/community\.general/pull/7506)\)\. -* portage \- fix changed\_use and newuse not triggering rebuilds \([https\://github\.com/ansible\-collections/community\.general/issues/6008](https\://github\.com/ansible\-collections/community\.general/issues/6008)\, [https\://github\.com/ansible\-collections/community\.general/pull/6548](https\://github\.com/ansible\-collections/community\.general/pull/6548)\)\. -* pritunl module utils \- fix incorrect URL parameter for orgnization add method \([https\://github\.com/ansible\-collections/community\.general/pull/7161](https\://github\.com/ansible\-collections/community\.general/pull/7161)\)\. -* proxmox \- fix error when a configuration had no template field \([https\://github\.com/ansible\-collections/community\.general/pull/6838](https\://github\.com/ansible\-collections/community\.general/pull/6838)\, [https\://github\.com/ansible\-collections/community\.general/issues/5372](https\://github\.com/ansible\-collections/community\.general/issues/5372)\)\. -* proxmox module utils \- add logic to detect whether an old Promoxer complains about the token\_name and token\_value parameters and provide a better error message when that happens \([https\://github\.com/ansible\-collections/community\.general/pull/6839](https\://github\.com/ansible\-collections/community\.general/pull/6839)\, [https\://github\.com/ansible\-collections/community\.general/issues/5371](https\://github\.com/ansible\-collections/community\.general/issues/5371)\)\. -* proxmox module utils \- fix proxmoxer library version check \([https\://github\.com/ansible\-collections/community\.general/issues/6974](https\://github\.com/ansible\-collections/community\.general/issues/6974)\, [https\://github\.com/ansible\-collections/community\.general/issues/6975](https\://github\.com/ansible\-collections/community\.general/issues/6975)\, [https\://github\.com/ansible\-collections/community\.general/pull/6980](https\://github\.com/ansible\-collections/community\.general/pull/6980)\)\. -* proxmox\_disk \- fix unable to create cdrom media due to size always being appended \([https\://github\.com/ansible\-collections/community\.general/pull/6770](https\://github\.com/ansible\-collections/community\.general/pull/6770)\)\. -* proxmox\_kvm \- absent state with force specified failed to stop the VM due to the timeout value not being passed to stop\_vm \([https\://github\.com/ansible\-collections/community\.general/pull/6827](https\://github\.com/ansible\-collections/community\.general/pull/6827)\)\. -* proxmox\_kvm \- restarted state did not actually restart a VM in some VM configurations\. The state now uses the Proxmox reboot endpoint instead of calling the stop\_vm and start\_vm functions \([https\://github\.com/ansible\-collections/community\.general/pull/6773](https\://github\.com/ansible\-collections/community\.general/pull/6773)\)\. -* proxmox\_kvm \- allow creation of VM with existing name but new vmid \([https\://github\.com/ansible\-collections/community\.general/issues/6155](https\://github\.com/ansible\-collections/community\.general/issues/6155)\, [https\://github\.com/ansible\-collections/community\.general/pull/6709](https\://github\.com/ansible\-collections/community\.general/pull/6709)\)\. -* proxmox\_kvm \- when name option is provided without vmid and VM with that name already exists then no new VM will be created \([https\://github\.com/ansible\-collections/community\.general/issues/6911](https\://github\.com/ansible\-collections/community\.general/issues/6911)\, [https\://github\.com/ansible\-collections/community\.general/pull/6981](https\://github\.com/ansible\-collections/community\.general/pull/6981)\)\. -* proxmox\_pool\_member \- absent state for type VM did not delete VMs from the pools \([https\://github\.com/ansible\-collections/community\.general/pull/7464](https\://github\.com/ansible\-collections/community\.general/pull/7464)\)\. -* proxmox\_tasks\_info \- remove api\_user \+ api\_password constraint from required\_together as it causes to require api\_password even when API token param is used \([https\://github\.com/ansible\-collections/community\.general/issues/6201](https\://github\.com/ansible\-collections/community\.general/issues/6201)\)\. -* proxmox\_template \- require requests\_toolbelt module to fix issue with uploading large templates \([https\://github\.com/ansible\-collections/community\.general/issues/5579](https\://github\.com/ansible\-collections/community\.general/issues/5579)\, [https\://github\.com/ansible\-collections/community\.general/pull/6757](https\://github\.com/ansible\-collections/community\.general/pull/6757)\)\. -* proxmox\_user\_info \- avoid direct type comparisons \([https\://github\.com/ansible\-collections/community\.general/pull/7085](https\://github\.com/ansible\-collections/community\.general/pull/7085)\)\. -* redfish\_command \- fix usage of message parsing in SimpleUpdate and MultipartHTTPPushUpdate commands to treat the lack of a MessageId as no message \([https\://github\.com/ansible\-collections/community\.general/issues/7465](https\://github\.com/ansible\-collections/community\.general/issues/7465)\, [https\://github\.com/ansible\-collections/community\.general/pull/7471](https\://github\.com/ansible\-collections/community\.general/pull/7471)\)\. -* redfish\_info \- fix ListUsers to not show empty account slots \([https\://github\.com/ansible\-collections/community\.general/issues/6771](https\://github\.com/ansible\-collections/community\.general/issues/6771)\, [https\://github\.com/ansible\-collections/community\.general/pull/6772](https\://github\.com/ansible\-collections/community\.general/pull/6772)\)\. -* redhat\_subscription \- use the right D\-Bus options for the consumer type when - registering a RHEL system older than 9 or a RHEL 9 system older than 9\.2 - and using consumer\_type - \([https\://github\.com/ansible\-collections/community\.general/pull/7378](https\://github\.com/ansible\-collections/community\.general/pull/7378)\)\. -* refish\_utils module utils \- changing variable names to avoid issues occuring when fetching Volumes data \([https\://github\.com/ansible\-collections/community\.general/pull/6883](https\://github\.com/ansible\-collections/community\.general/pull/6883)\)\. -* rhsm\_repository \- when using the purge option\, the repositories - dictionary element in the returned JSON is now properly updated according - to the pruning operation - \([https\://github\.com/ansible\-collections/community\.general/pull/6676](https\://github\.com/ansible\-collections/community\.general/pull/6676)\)\. -* rundeck \- fix TypeError on 404 API response \([https\://github\.com/ansible\-collections/community\.general/pull/6983](https\://github\.com/ansible\-collections/community\.general/pull/6983)\)\. -* selective callback plugin \- fix length of task name lines in output always being 3 characters longer than desired \([https\://github\.com/ansible\-collections/community\.general/pull/7374](https\://github\.com/ansible\-collections/community\.general/pull/7374)\)\. -* snap \- an exception was being raised when snap list was empty \([https\://github\.com/ansible\-collections/community\.general/pull/7124](https\://github\.com/ansible\-collections/community\.general/pull/7124)\, [https\://github\.com/ansible\-collections/community\.general/issues/7120](https\://github\.com/ansible\-collections/community\.general/issues/7120)\)\. -* snap \- assume default track latest in parameter channel when not specified \([https\://github\.com/ansible\-collections/community\.general/pull/6835](https\://github\.com/ansible\-collections/community\.general/pull/6835)\, [https\://github\.com/ansible\-collections/community\.general/issues/6821](https\://github\.com/ansible\-collections/community\.general/issues/6821)\)\. -* snap \- change the change detection mechanism from \"parsing installation\" to \"comparing end state with initial state\" \([https\://github\.com/ansible\-collections/community\.general/pull/7340](https\://github\.com/ansible\-collections/community\.general/pull/7340)\, [https\://github\.com/ansible\-collections/community\.general/issues/7265](https\://github\.com/ansible\-collections/community\.general/issues/7265)\)\. -* snap \- fix crash when multiple snaps are specified and one has \-\-\- in its description \([https\://github\.com/ansible\-collections/community\.general/pull/7046](https\://github\.com/ansible\-collections/community\.general/pull/7046)\)\. -* snap \- fix the processing of the commands\' output\, stripping spaces and newlines from it \([https\://github\.com/ansible\-collections/community\.general/pull/6826](https\://github\.com/ansible\-collections/community\.general/pull/6826)\, [https\://github\.com/ansible\-collections/community\.general/issues/6803](https\://github\.com/ansible\-collections/community\.general/issues/6803)\)\. -* sorcery \- fix interruption of the multi\-stage process \([https\://github\.com/ansible\-collections/community\.general/pull/7012](https\://github\.com/ansible\-collections/community\.general/pull/7012)\)\. -* sorcery \- fix queue generation before the whole system rebuild \([https\://github\.com/ansible\-collections/community\.general/pull/7012](https\://github\.com/ansible\-collections/community\.general/pull/7012)\)\. -* sorcery \- latest state no longer triggers update\_cache \([https\://github\.com/ansible\-collections/community\.general/pull/7012](https\://github\.com/ansible\-collections/community\.general/pull/7012)\)\. -* terraform \- prevents \-backend\-config option double encapsulating with shlex\_quote function\. \([https\://github\.com/ansible\-collections/community\.general/pull/7301](https\://github\.com/ansible\-collections/community\.general/pull/7301)\)\. -* tss lookup plugin \- fix multiple issues when using fetch\_attachments\=true \([https\://github\.com/ansible\-collections/community\.general/pull/6720](https\://github\.com/ansible\-collections/community\.general/pull/6720)\)\. -* zypper \- added handling of zypper exitcode 102\. Changed state is set correctly now and rc 102 is still preserved to be evaluated by the playbook \([https\://github\.com/ansible\-collections/community\.general/pull/6534](https\://github\.com/ansible\-collections/community\.general/pull/6534)\)\. - - -#### community\.grafana - -* Fix error with datasources configured without basicAuth -* grafana\_folder\, fix an issue during delete \(starting Grafana 9\.3\) - - -#### community\.hashi\_vault - -* vault\_write \- the vault\_write lookup and module were not able to write data containing keys named path or wrap\_ttl due to a bug in the hvac library\. These plugins have now been updated to take advantage of fixes in hvac\>\=1\.2 to address this \([https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/389](https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/389)\)\. - - -#### community\.hrobot - -* Show more information \(if available\) from error messages \([https\://github\.com/ansible\-collections/community\.hrobot/pull/89](https\://github\.com/ansible\-collections/community\.hrobot/pull/89)\)\. - - -#### community\.libvirt - -* libvirt\_qemu \- connection plugin threw a warning about an improperly configured remote target\. Fix adds inventory\_hostname to options\.remote\_addr\.vars \([https\://github\.com/ansible\-collections/community\.libvirt/pull/147](https\://github\.com/ansible\-collections/community\.libvirt/pull/147)\)\. -* libvirt\_qemu \- fix encoding errors on Windows guests for non\-ASCII return values \([https\://github\.com/ansible\-collections/community\.libvirt/pull/157](https\://github\.com/ansible\-collections/community\.libvirt/pull/157)\) -* virt \- fix virt module to undefine a domain with nvram\, managed\_save\, snapshot\_metadata or checkpoints\_metadata \([https\://github\.com/ansible\-collections/community\.libvirt/issues/40](https\://github\.com/ansible\-collections/community\.libvirt/issues/40)\)\. -* virt\_pool \- replace discouraged function listAllVolumes with listAllVolumes to fix potential race conditions \([https\://github\.com/ansible\-collections/community\.libvirt/pull/135](https\://github\.com/ansible\-collections/community\.libvirt/pull/135)\)\. -* virt\_pool \- replace discouraged functions listStoragePools and listDefinedStoragePools with listAllStoragePools to fix potential race conditions \([https\://github\.com/ansible\-collections/community\.libvirt/pull/134](https\://github\.com/ansible\-collections/community\.libvirt/pull/134)\)\. - - -#### community\.mysql - -* mysql module utils \- use the connection arguments db instead of database and passwd instead of password when running with MySQLdb \< 2\.0\.0 \([https\://github\.com/ansible\-collections/community\.mysql/pull/553](https\://github\.com/ansible\-collections/community\.mysql/pull/553)\)\. - - -#### community\.network - -* cnos\_l3\_interface \- fix import errors \([https\://github\.com/ansible\-collections/community\.network/pull/531](https\://github\.com/ansible\-collections/community\.network/pull/531)\)\. -* exos\_config \- missing whitespace in command with defaults\: True\. It happened because the command is show configurationdetail instead of show configuration detail \([https\://github\.com/ansible\-collections/community\.network/pull/516](https\://github\.com/ansible\-collections/community\.network/pull/516)\)\. -* exos\_facts \- returns timeout error when we use connection type network\_cli\. It happened because we send command without no\-refresh and script cli2json\.py stuck in loop while reading console output \([https\://github\.com/ansible\-collections/community\.network/pull/517](https\://github\.com/ansible\-collections/community\.network/pull/517)\)\. -* icx\_l3\_interface \- fix import errors \([https\://github\.com/ansible\-collections/community\.network/pull/531](https\://github\.com/ansible\-collections/community\.network/pull/531)\)\. -* slxos\_l3\_interface \- fix import errors \([https\://github\.com/ansible\-collections/community\.network/pull/531](https\://github\.com/ansible\-collections/community\.network/pull/531)\)\. - - -#### community\.postgresql - -* postgresql\_db \- when the task is completed successfully\, close the database connection \([https\://github\.com/ansible\-collections/community\.postgresql/issues/465](https\://github\.com/ansible\-collections/community\.postgresql/issues/465)\)\. -* postgresql\_ext \- fixed queries return value name in documentation \([https\://github\.com/ansible\-collections/community\.postgresql/pull/545](https\://github\.com/ansible\-collections/community\.postgresql/pull/545)\)\. -* postgresql\_info \- fix SQL syntax issue \([https\://github\.com/ansible\-collections/community\.postgresql/issues/570](https\://github\.com/ansible\-collections/community\.postgresql/issues/570)\)\. -* postgresql\_info \- when the task is completed successfully\, close the database connection \([https\://github\.com/ansible\-collections/community\.postgresql/issues/465](https\://github\.com/ansible\-collections/community\.postgresql/issues/465)\)\. -* postgresql\_ping \- when the task is completed successfully\, close the database connection \([https\://github\.com/ansible\-collections/community\.postgresql/issues/465](https\://github\.com/ansible\-collections/community\.postgresql/issues/465)\)\. -* postgresql\_privs \- fixed error message and documentation \([https\://github\.com/ansible\-collections/community\.postgresql/pull/510](https\://github\.com/ansible\-collections/community\.postgresql/pull/510)\)\. -* postgresql\_privs \- when the task is completed successfully\, close the database connection \([https\://github\.com/ansible\-collections/community\.postgresql/issues/465](https\://github\.com/ansible\-collections/community\.postgresql/issues/465)\)\. -* postgresql\_set \- fixed GUC\_LIST\_QUOTE parameters \([https\://github\.com/ansible\-collections/community\.postgresql/pull/521](https\://github\.com/ansible\-collections/community\.postgresql/pull/521)\)\. -* postgresql\_set \- fixed error message in param\_set function \([https\://github\.com/ansible\-collections/community\.postgresql/pull/505](https\://github\.com/ansible\-collections/community\.postgresql/pull/505)\)\. - - -#### community\.routeros - -* api\_info\, api\_modify \- in the snmp path\, ensure that engine\-id\-suffix is only available on RouterOS 7\.10\+\, and that engine\-id is read\-only on RouterOS 7\.10\+ \([https\://github\.com/ansible\-collections/community\.routeros/issues/208](https\://github\.com/ansible\-collections/community\.routeros/issues/208)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/218](https\://github\.com/ansible\-collections/community\.routeros/pull/218)\)\. -* api\_modify\, api\_info \- add missing parameter engine\-id\-suffix for the snmp path \([https\://github\.com/ansible\-collections/community\.routeros/issues/189](https\://github\.com/ansible\-collections/community\.routeros/issues/189)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/190](https\://github\.com/ansible\-collections/community\.routeros/pull/190)\)\. -* api\_modify\, api\_info \- add missing parameter tls for the tool e\-mail path \([https\://github\.com/ansible\-collections/community\.routeros/issues/179](https\://github\.com/ansible\-collections/community\.routeros/issues/179)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/180](https\://github\.com/ansible\-collections/community\.routeros/pull/180)\)\. -* facts \- do not crash in CLI output preprocessing in unexpected situations during line unwrapping \([https\://github\.com/ansible\-collections/community\.routeros/issues/170](https\://github\.com/ansible\-collections/community\.routeros/issues/170)\, [https\://github\.com/ansible\-collections/community\.routeros/pull/177](https\://github\.com/ansible\-collections/community\.routeros/pull/177)\)\. - - -#### community\.sops - -* Avoid pre\-releases when picking the latest version when using the GitHub API method \([https\://github\.com/ansible\-collections/community\.sops/pull/159](https\://github\.com/ansible\-collections/community\.sops/pull/159)\)\. -* Fix RPM URL for the 3\.8\.0 release \([https\://github\.com/ansible\-collections/community\.sops/pull/161](https\://github\.com/ansible\-collections/community\.sops/pull/161)\)\. -* Fix changed DEB and RPM URLs for 3\.8\.0 and its prerelease\(s\) \([https\://github\.com/ansible\-collections/community\.sops/pull/159](https\://github\.com/ansible\-collections/community\.sops/pull/159)\)\. -* install role \- fix sops\_github\_latest\_detection\=latest\-release\, which broke due to sops moving to another GitHub organization \([https\://github\.com/ansible\-collections/community\.sops/pull/151](https\://github\.com/ansible\-collections/community\.sops/pull/151)\)\. -* install role \- make sure that the pkg\_mgr fact is definitely available when installing on localhost\. This can improve error messages in some cases \([https\://github\.com/ansible\-collections/community\.sops/issues/145](https\://github\.com/ansible\-collections/community\.sops/issues/145)\, [https\://github\.com/ansible\-collections/community\.sops/pull/146](https\://github\.com/ansible\-collections/community\.sops/pull/146)\)\. -* sops\_encrypt \- ensure that output\-type is set to yaml when the file extension \.yml is used\. Now both \.yaml and \.yml files use the SOPS \-\-output\-type\=yaml formatting \([https\://github\.com/ansible\-collections/community\.sops/issues/164](https\://github\.com/ansible\-collections/community\.sops/issues/164)\)\. - - -#### community\.vmware - -* Add missing modules to runtime\.yml \([https\://github\.com/ansible\-collections/community\.vmware/pull/1764](https\://github\.com/ansible\-collections/community\.vmware/pull/1764)\)\. -* fix problem when module try apply non global or non VM type custom attribute to VM object \([https\://github\.com/ansible\-collections/community\.vmware/issues/1772](https\://github\.com/ansible\-collections/community\.vmware/issues/1772)\) -* vmware\_deploy\_ovf \- Fix an issue with networks that are available on more than one cluster \([https\://github\.com/ansible\-collections/community\.vmware/issues/1590](https\://github\.com/ansible\-collections/community\.vmware/issues/1590)\)\. -* vmware\_deploy\_ovf \- fix error in finding networks part of code \([https\://github\.com/ansible\-collections/community\.vmware/issues/1853](https\://github\.com/ansible\-collections/community\.vmware/issues/1853)\)\. -* vmware\_deploy\_ovf\: fix error in finding networks part of code [https\://github\.com/ansible\-collections/community\.vmware/issues/1853](https\://github\.com/ansible\-collections/community\.vmware/issues/1853) -* vmware\_guest\_custom\_attributes \- fix problem when module try apply non global or non VM type custom attribute to VM object \([https\://github\.com/ansible\-collections/community\.vmware/issues/1772](https\://github\.com/ansible\-collections/community\.vmware/issues/1772)\)\. -* vmware\_guest\_disk \- Fix idempotency for absent disks \([https\://github\.com/ansible\-collections/community\.vmware/issues/1765](https\://github\.com/ansible\-collections/community\.vmware/issues/1765)\)\. -* vmware\_vm\_info \- Add missing show\_folder parameter \([https\://github\.com/ansible\-collections/community\.vmware/issues/1709](https\://github\.com/ansible\-collections/community\.vmware/issues/1709)\)\. - - -#### community\.windows - -* win\_psmodule \- fix requireLicenseAcceptance test so that it is no longer always true - - -#### community\.zabbix - -* Proxy and Agent Roles \- Added zabbix\_api\_use\_ssl variable to allow secure API connections -* Web Role \- Added defaults and documentation for zabbix\_apache\_custom\_includes -* agent \- Handled undefined variable error for Windows default versions -* agent role \- Added missing become statement to allow run to role as nonroot -* all roles \- Added option to selectively disable a repo on Redhat installs -* zabbix\_host module \- fix updating hosts that were discovered via LLD -* zabbix\_proxy role \- failed at version validation\. Fix adds cast of zabbix\_proxy\_version to float\, similarly to the other roles\. -* zabbix\_proxy role \- undefined vars at updating proxy definition\. Fix adds null defaults for zabbix\_proxy\_tlsaccept and zabbix\_proxy\_tlsconnect\. -* zabbix\_web role \- removed \'ssl on\;\' nginx configuration\, which is no longer supported since nginx version 1\.25\.1\. - - -#### containers\.podman - -* Add hooks\-dir parameter for containers -* Add idempotency for restart\-policy for containers -* Add missing options to podman network -* Add more explanation about cmd\_args command usage -* Add stdout to podman build and push actions -* Added support for \"userns\" parameter to \"play\" module -* CI \- fix pip installation of the collection -* CI \- fix podman play job for 4\.4\.x versions -* Change yes/no to true/false in the modules -* Convert str to json format before evaluating length\. -* Fix CI for newest Ansible branch 2\.16 -* Fix common file for Python 2\.7 -* Fix idempotency for pods with uidmap and gidmap -* Fix idempotency lowercase for devices -* Fix network tests for Podman v4 -* Fix podman logout tests for v4 -* Fix pylint issues for CI ansible\-test -* Fix undesirable splitting of IPv6 host addresses -* Improved documentation of podman\_generate\_systemd module -* Prepare CI for Podman v3 backward compatibility -* Support SHA256 tag for podman images -* Update podman\_image to specify CPU arch when pulling image -* added podman\_prune module -* become plugin podman\_unshare become\_user default -* fix for buildah improper remote target -* for pod kube recreate -* pod \- Support passing multiple networks with params -* podman\-login \- fix FIPS md5 issue and registry requirement -* podman\-pod \- Fix idempotency for pods in 4\.4\.x versions -* podman\_container \- Add diff and change detection to systemd generation -* podman\_container \- Add example with quotes in command to docs -* podman\_container \- Fix healthcheck issue where defined in image -* podman\_container \- Fix idempoency issue with PID of container -* podman\_container \- Fix idempotency for RestartPolicy when MaximumRetryCount -* podman\_container \- Fix idempotency for devices -* podman\_container \- Fixed idempotency with cpus parameter -* podman\_container \- Improve docs about container env\_file on remote machine -* podman\_container \- added cpu\_quota parameter to podman\_container -* podman\_export\,podman\_import \- Adding volume import and export option -* podman\_generate\_systemd \- Add a force field to podman\_generate\_systemd -* podman\_image \- Add restart\-sec and other options to systemd generation -* podman\_image \- Fix pulling short image name -* podman\_network \- Do not force network removal by default -* podman\_network \- Fix network DNS enable idempotency issue -* podman\_pod \- Fix idempotency when running inside Podman container -* podman\_systemd \- Ignore header when comparing systemd files content - - -#### dellemc\.enterprise\_sonic - -* Fix regression test bugs in multiple modules \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/180](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/180)\)\. -* Fix sanity check errors in the collection caused by Ansible library changes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/160](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/160)\)\. -* install \- Update the required ansible\.netcommon version \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/176](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/176)\)\. -* sonic\_bgp\_af \- Fix issue with vnis and advertise modification for a single BGP AF \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/201](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/201)\)\. -* sonic\_bgp\_as\_paths \- Fix issues with merged and deleted states \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/250](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/250)\)\. -* sonic\_interfaces \- Fix command timeout issue \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/261](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/261)\)\. -* sonic\_l3\_interfaces \- Fix IP address deletion issue \(GitHub issue\#170\) \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/231](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/231)\)\. -* sonic\_lag\_interfaces \- Fix port name issue \(GitHub issue\#153\) \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/119](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/119)\)\. -* sonic\_neighbors \- Fix handling of default attributes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/233](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/233)\)\. -* sonic\_ntp \- Fix the issue \(GitHub issue\#205\) with NTP clear all without config given \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/224](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/224)\)\. -* sonic\_vlan\_mapping \- Remove platform checks \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/262](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/262)\)\. -* sonic\_vrfs \- Add tasks as a workaround to mgmt VRF bug \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/146](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/146)\)\. -* sonic\_vrfs \- Fix spacing issue in CLI test case \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/257](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/257)\)\. -* sonic\_vrfs \- Fix the issue \(GitHub issue\#194\) with VRF when deleting interface\([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/230](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/230)\)\. -* sonic\_vxlans \- Remove required\_together restriction for evpn\_nvo and source\_ip attributes \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/130](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/130)\)\. -* workflows \- Fix dependency installation issue in the code coverage workflow \([https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/199](https\://github\.com/ansible\-collections/dellemc\.enterprise\_sonic/pull/199)\)\. - - -#### dellemc\.openmanage - -* Job tracking is fixed for iDRAC SCP import \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/pull/504](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/pull/504)\)\. -* OMSDK is handled for import error SNIMissingWarning that is undefined \([https\://github\.com/dell/omsdk/issues/33](https\://github\.com/dell/omsdk/issues/33)\)\. -* The Chassis Power PIN value must be of six numerical digits input from the module\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/492](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/492)\)\. -* Update document on how to use with ansible\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/393](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/393)\)\. -* idrac\_attributes module can now support modification of IPv6 attributes on iDRAC 8\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/488](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/488)\)\. -* idrac\_firmware \- Issue\(276335\) \- This module fails on the Python 3\.11\.x version with NFS share\. Use a different Python version or Share type\. -* idrac\_server\_config\_profile \- The import for Server Configuration Profile \(SCP\) operation fails to handle the absence of a file and incorrectly reports success instead of the expected failure\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/544](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/544)\)\. -* ome\_device\_info is limited to 50 responses with a query filter\. \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/499](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/499)\)\. -* ome\_device\_quick\_deploy \- If the blade is not present\, then the module can assign a static IP to the slot \([https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/532](https\://github\.com/dell/dellemc\-openmanage\-ansible\-modules/issues/532)\)\. - - -#### f5networks\.f5\_modules - -* bigip\_device\_certificate \- error\-handling for connection error while running exec command function to fetch certificate details -* bigip\_pool \- Resolved a bug in the code to allow the module to remove monitors from the pool -* bigip\_provision\_async \- created module to address scenarios where infinite loops or timeouts happen -* bigip\_ssl\_key\_cert \- fixed flaw in code to make module work with same key and cert name when true\_names set to true -* bigip\_virtual\_server \- fixed an idempotency bug where the module send asm policy profile for update even when not specified explicitly by the user - - -#### fortinet\.fortimanager - -* Add \'access\_token\' in \'fmgr\_generic\'\. -* Add param \'platform\' in \'fmgr\_wtpprofile\' and param \'interface\' in \'fmgr\_fsp\_vlan\'\. -* Corrected description of parameters in documentation\. -* Fix a bug that collection may update the resource when it does not need to\. -* Fix a bug where the user may not be able to use workspace\_locking\_adom if the workspace mode is per\-adom\. -* Fix some modules missing revision \(used for version warning\)\. -* Fixed Many sanity test warnings and errors\. -* Fixed a bug where users might not be able to login\. -* Fixed the bug that would report an error when providing access\_token and username/password at the same time\. -* Fixed version\_added in the document\. The value of this parameter is the version each module first supported in the FortiManager Ansible Collection\. -* Improve document\. -* Improve fmgr\_fact\. \'changed\' will not be true anymore if you get the result\. -* Improve login logic in httpapi plugin\. -* Improve sanity tests\. -* When the JSON data sent by FortiManager is not in the right format\, the collection can still execute correctly\. - - -#### fortinet\.fortios - -* Fix the error of pure number password\. -* Fix the hyperlink issue for the supported FOS versions in USER\'s GUIDE\. -* Fix the issue of one session remaining open after the task is finished\. -* Fix the issue while comparing the changes in before and after data in check\_mode\; -* Fix the issues that some parameters are not in a specific fos vm versions\. -* Fix the request error when updating global object\; -* Fix the sanity test error\; -* Fix the wrong credential error when using username/password in fos verion 6\; -* To optimize the json\_generic module and reduce the time spent while sending GET requests\. - - -#### google\.cloud - -* Use default service account if service\_account\_email is unset\. - - -#### hetzner\.hcloud - -* \*\_info \- Consistently fail on invalid ID in \*\_info modules\. -* hcloud\_firewall \- The port argument is required when the firewall rule protocol is udp or tcp\. -* hcloud\_image\_info Fix facts modules deprecated result key -* hcloud\_load\_balancer\_service \- In the returned data\, the invalid health\_check\.http\.certificates field was renamed to health\_check\.http\.status\_codes\. -* hcloud\_location\_info Fix facts modules deprecation warnings -* hcloud\_server \- Fix string formatting error on deprecated server type warning -* hcloud\_server \- TypeError when trying to use deprecated image with allow\_deprecated\_image -* hcloud\_server\_type\_info Fix facts modules deprecated result dict -* hcloud\_server\_type\_info Fix facts modules deprecation warnings - - -#### junipernetworks\.junos - -* fix no\_advertise\_adjacency\_segment config implementation\. -* fix no\_eligible\_backup config implementation\. -* fix no\_eligible\_remote\_backup config implementation\. -* fix no\_interface\_state\_traps config implementation\. -* fix no\_neighbor\_down\_notification config implementation\. -* fix node\_link\_protection implementation\. -* fix md5 authentication which allows list of keys to be configured\. - - -#### microsoft\.ad - -* Added the missing dependency dpapi\-ng to Ansible Execution Environments requirements file for LAPS decryption support -* Ensure renaming and moving an object will be done with the domain\_server and domain\_username credentials specified \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/54](https\://github\.com/ansible\-collections/microsoft\.ad/issues/54) -* Fix up protect\_from\_deletion when creating new AD objects \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/47](https\://github\.com/ansible\-collections/microsoft\.ad/issues/47) -* Fix up date\_time attribute comparisons to be idempotent \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/57](https\://github\.com/ansible\-collections/microsoft\.ad/issues/57) -* group \- Fix idempotency check when scope\: domainlocal is set \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/31](https\://github\.com/ansible\-collections/microsoft\.ad/issues/31) -* microsoft\.ad\.group \- ensure the scope and category values are checked as case insensitive to avoid changes when not needed \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/31](https\://github\.com/ansible\-collections/microsoft\.ad/issues/31) -* microsoft\.ad\.user \- Ensure the spn diff after key is spn and not kerberos\_encryption\_types -* microsoft\.ad\.user \- treat an expired account as a password that needs to be changed - - -#### netapp\.ontap - -* na\_ontap\_dns \- fix DNS not working with Cluster mode\. -* na\_ontap\_dns \- fix keyerror for uuid when DNS is set to vserver in REST\. -* na\_ontap\_ems\_filter \- fix delete operation not idempotent for filter\. -* na\_ontap\_ems\_filter \- fix modify operation to add rule in existing filter\. -* na\_ontap\_login\_messages \- fix banner and motd\_message not idempotent when trailing \'n\' is present\. -* na\_ontap\_login\_messages \- fix idempotency issue in Cluster scope in REST\. -* na\_ontap\_login\_messages \- fix idempotent issue on show\_cluster\_motd option when try to set banner or motd\_message for the first time in REST\. -* na\_ontap\_nfs \- fix default\_user under windows not getting modified if not set previously in REST\. -* na\_ontap\_svm \- fix REST version warning for ndmp under services\. -* na\_ontap\_volume \- fix invalid field error with \'space\.snapshot\.autodelete\' in REST\. - - -#### netbox\.netbox - -* Fix schema caching \[\#1053\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1053](https\://github\.com/netbox\-community/ansible\_modules/pull/1053)\) -* netbox\_ device \- Adjust device\_role to role for NetBox 3\.6 \[\#1066\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1066](https\://github\.com/netbox\-community/ansible\_modules/pull/1066)\) - - ## Docutils System Messages - -
- ERROR/3 (<string>, line 1) - - Unknown target name\: \"netbox\"\. - -
- - -#### ovirt\.ovirt - -* HE \- add back dependency on python3\-jmespath \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/701](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/701)\) -* HE \- drop remaining filters using netaddr \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/702](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/702)\) -* HE \- drop usage of ipaddr filters and remove dependency on python\-netaddr \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/696](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/696)\) -* HE \- fix ipv4 and ipv6 check after dropping netaddr \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/704](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/704)\) -* hosted\_engine\_setup \- Update README \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/706](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/706)\) -* ovirt\_disk \- Fix issue in detaching the direct LUN \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/700](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/700)\) -* ovirt\_quota \- Convert storage size to integer \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/712](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/712)\) -* ovirt\_role \- Fix administrative option when set to False \([https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/723](https\://github\.com/oVirt/ovirt\-ansible\-collection/pull/723)\)\. - - -#### purestorage\.flasharray - -* purefa\_certs \- Resolved CSR issue and require export\_file for state sign\. -* purefa\_ds \- Fixes error when enabling directory services while a bind\_user is set on the array and a bind\_password is not\. -* purefa\_ds \- Fixes issue with creating a new ds configuration while setting force\_bind\_password as \"false\"\. -* purefa\_host \- Fix incorrect calling of \"module\.params\"\. -* purefa\_info \- Added missing alerts subset name -* purefa\_info \- Fix serial number generation issue for vVols -* purefa\_info \- Fixed attribute errors after EUC changes -* purefa\_info \- Fixed issue with replica links in unknown state -* purefa\_info \- Fixed missing arguments for google\_offload and pods -* purefa\_info \- Fixed parameter error when enabled and disabled timers are different values on purity 6\.4\.10\+ arrays\. -* purefa\_info \- Fixed py39 specific bug with multiple DNS entries -* purefa\_network \- Allow gateway to be set as 0\.0\.0\.0 to remove an existing gateway address -* purefa\_network \- Fixed IPv6 support issues -* purefa\_network \- Fixed idempotency issue when gateway not modified -* purefa\_pgsched \- Fixed bug with an unnecessary substitution -* purefa\_pgsched \- Resolved idempotency issue with snap and replication enabled flags -* purefa\_pgsnap \- Enabled to eradicate destroyed snapshots\. -* purefa\_pgsnap \- Ensure that now and remote are mutually exclusive\. -* purefa\_pgsnap \- Fixed issue with eradicating deleted pgsnapshot -* purefa\_pgsnap \- Update the accepted suffixes to include also numbers only\. Fixed the logic to retrieve the latest completed snapshot -* purefa\_policy \- Set user\_mapping parameter default to True -* purefa\_snap \- Fixed incorrect calling logic causing failure on remote snapshot creation -* purefa\_snap \- Fixed issue with remote snapshot retrieve\. Mainly a workaround to an issue with Purity REST 1\.x when remote snapshots are searched\. -* purefa\_subnet \- Fixed IPv4 gateway removal issue\. -* purefa\_subnet \- Fixed IPv6 support issues\. -* purefa\_volume \- Fixed bug with NULL suffix for multiple volume creation\. - - -#### purestorage\.flashblade - -* purefb\_bucket \- Fixed bucket type mode name typo -* purefb\_fs \- Fixed issue with incorrect promotion state setting -* purefb\_info \- Fixed missing atributes for SMB client policy rules -* purefb\_userpolicy \- Fixed show state for all user policies - - -#### purestorage\.fusion - -* fusion\_info \- fix runtime errors caused when listing interfaces\, arrays and snapshots dicts -* fusion\_pg \- freshly created placement group is now moved to correct array -* fusion\_pp \- \'local\_rpo\' changed to accept same input as \'local\_retention\' -* fusion\_pp \- updated retention description -* fusion\_ra \- \'name\' deprecated and aliased to \'role\' - - -#### t\_systems\_mms\.icinga\_director - -* add icinga\_deploy\_\* to action\_group and test it \([https\://github\.com/T\-Systems\-MMS/ansible\-collection\-icinga\-director/pull/214](https\://github\.com/T\-Systems\-MMS/ansible\-collection\-icinga\-director/pull/214)\) - - -#### theforeman\.foreman - -* compute\_profile\, host \- properly support nested VMware clusters \([https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2211394](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2211394)\) -* content\_credential \- don\'t require content\_type and content parameters when removing credentials \([https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1588](https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1588)\) -* content\_credentials role \- don\'t require content\_type and content parameters when removing credentials -* content\_view\_filter \- don\'t fail when creating a modulemd filter \([https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1608](https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1608)\, [https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2208557](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2208557)\) -* content\_view\_publish role \- correctly pass version not description to the module \([https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2234444](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2234444)\) -* convert2rhel role \- Sync repos before CV publish \([https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2216907](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2216907)\) -* repositories role \- don\'t log repository information when creating products \([https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2183357](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2183357)\) -* repository \- don\'t fail when removing a content credential from a repository \([https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2224122](https\://bugzilla\.redhat\.com/show\_bug\.cgi\?id\=2224122)\) -* smart\_class\_parameter \- correctly allow setting override to false \([https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1644](https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1644)\) - - -#### vultr\.cloud - -* firewall\_rule \- Fixed an idempotency issue if parameter port is set on protocols other than TCP/UDP \([https\://github\.com/vultr/ansible\-collection\-vultr/issues/76](https\://github\.com/vultr/ansible\-collection\-vultr/issues/76)\)\. - - -#### vyos\.vyos - -* vyos\-l3\_interface\_facts \- fixed error when using no\-default\-link\-local option\. \([https\://github\.com/ansible\-collections/vyos\.vyos/issues/295](https\://github\.com/ansible\-collections/vyos\.vyos/issues/295)\) - - -### Known Issues - - -#### Ansible\-core - -* ansible\-galaxy \- dies in the middle of installing a role when that role contains Java inner classes \(files with \$ in the file name\)\. This is by design\, to exclude temporary or backup files\. \([https\://github\.com/ansible/ansible/pull/81553](https\://github\.com/ansible/ansible/pull/81553)\)\. -* ansible\-test \- The pep8 sanity test is unable to detect f\-string spacing issues \(E201\, E202\) on Python 3\.10 and 3\.11\. They are correctly detected under Python 3\.12\. See \([https\://github\.com/PyCQA/pycodestyle/issues/1190](https\://github\.com/PyCQA/pycodestyle/issues/1190)\)\. - - -#### community\.crypto - -* Ansible markup will show up in raw form on ansible\-doc text output for ansible\-core before 2\.15\. If you have trouble deciphering the documentation markup\, please upgrade to ansible\-core 2\.15 \(or newer\)\, or read the HTML documentation on [https\://docs\.ansible\.com/ansible/devel/collections/community/crypto/](https\://docs\.ansible\.com/ansible/devel/collections/community/crypto/)\. - - -#### community\.dns - -* Ansible markup will show up in raw form on ansible\-doc text output for ansible\-core before 2\.15\. If you have trouble deciphering the documentation markup\, please upgrade to ansible\-core 2\.15 \(or newer\)\, or read the HTML documentation on [https\://docs\.ansible\.com/ansible/devel/collections/community/dns/](https\://docs\.ansible\.com/ansible/devel/collections/community/dns/)\. - - -#### community\.docker - -* Ansible markup will show up in raw form on ansible\-doc text output for ansible\-core before 2\.15\. If you have trouble deciphering the documentation markup\, please upgrade to ansible\-core 2\.15 \(or newer\)\, or read the HTML documentation on [https\://docs\.ansible\.com/ansible/devel/collections/community/docker/](https\://docs\.ansible\.com/ansible/devel/collections/community/docker/)\. - - -#### community\.general - -* Ansible markup will show up in raw form on ansible\-doc text output for ansible\-core before 2\.15\. If you have trouble deciphering the documentation markup\, please upgrade to ansible\-core 2\.15 \(or newer\)\, or read the HTML documentation on [https\://docs\.ansible\.com/ansible/devel/collections/community/general/](https\://docs\.ansible\.com/ansible/devel/collections/community/general/) \([https\://github\.com/ansible\-collections/community\.general/pull/6539](https\://github\.com/ansible\-collections/community\.general/pull/6539)\)\. - - -#### community\.hrobot - -* Ansible markup will show up in raw form on ansible\-doc text output for ansible\-core before 2\.15\. If you have trouble deciphering the documentation markup\, please upgrade to ansible\-core 2\.15 \(or newer\)\, or read the HTML documentation on [https\://docs\.ansible\.com/ansible/devel/collections/community/hrobot/](https\://docs\.ansible\.com/ansible/devel/collections/community/hrobot/)\. - - -#### community\.routeros - -* Ansible markup will show up in raw form on ansible\-doc text output for ansible\-core before 2\.15\. If you have trouble deciphering the documentation markup\, please upgrade to ansible\-core 2\.15 \(or newer\)\, or read the HTML documentation on [https\://docs\.ansible\.com/ansible/devel/collections/community/routeros/](https\://docs\.ansible\.com/ansible/devel/collections/community/routeros/)\. - - -#### community\.sops - -* Ansible markup will show up in raw form on ansible\-doc text output for ansible\-core before 2\.15\. If you have trouble deciphering the documentation markup\, please upgrade to ansible\-core 2\.15 \(or newer\)\, or read the HTML documentation on [https\://docs\.ansible\.com/ansible/devel/collections/community/sops/](https\://docs\.ansible\.com/ansible/devel/collections/community/sops/)\. - - -#### dellemc\.openmanage - -* ca\_path missing \- Issue\(275740\) \- The roles idrac\_attributes\, redfish\_storage\_volume\, and idrac\_server\_powerstate have a missing parameter ca\_path\. -* idrac\_firmware \- Issue\(276335\) \- This module fails on the Python 3\.11\.x version with NFS shares\. Use a different Python version or Share type\. -* idrac\_firmware \- Issue\(279282\) \- This module does not support firmware update using HTTP\, HTTPS\, and FTP shares with authentication on iDRAC8\. -* idrac\_network\_attributes \- Issue\(279049\) \- If unsupported values are provided for the parameter ome\_network\_attributes\, then this module does not provide a correct error message\. -* idrac\_redfish\_storage\_controller \- Issue\(256164\) \- If incorrect value is provided for one of the attributes in the provided attribute list for controller configuration\, then this module does not exit with error\. -* ome\_device\_network\_services \- Issue\(212681\) \- The module does not provide a proper error message if unsupported values are provided for the following parameters\- port\_number\, community\_name\, max\_sessions\, max\_auth\_retries\, and idle\_timeout\. -* ome\_device\_power\_settings \- Issue\(212679\) \- The module displays the following message if the value provided for the parameter power\_cap is not within the supported range of 0 to 32767\, Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\. -* ome\_device\_quick\_deploy \- Issue\(275231\) \- This module does not deploy a new configuration to a slot that has disabled IPv6\. -* ome\_smart\_fabric\_uplink \- Issue\(186024\) \- Despite the module supported by OpenManage Enterprise Modular\, it does not allow the creation of multiple uplinks of the same name\. If an uplink is created using the same name as an existing uplink\, the existing uplink is modified\. - - -### New Plugins - - -#### Cliconf - -* ansible\.netcommon\.default \- General purpose cliconf plugin for new platforms - - -#### Filter - -* ansible\.utils\.ipcut \- This filter is designed to get 1st or last few bits of IP address\. -* ansible\.utils\.ipv6form \- This filter is designed to convert ipv6 address in different formats\. For example expand\, compressetc\. -* community\.crypto\.gpg\_fingerprint \- Retrieve a GPG fingerprint from a GPG public or private key - - -#### Inventory - -* community\.aws\.aws\_mq \- MQ broker inventory source - - -#### Lookup - -* community\.crypto\.gpg\_fingerprint \- Retrieve a GPG fingerprint from a GPG public or private key file -* community\.dns\.lookup \- Look up DNS records -* community\.dns\.lookup\_as\_dict \- Look up DNS records as dictionaries -* community\.general\.bitwarden\_secrets\_manager \- Retrieve secrets from Bitwarden Secrets Manager - - -### New Modules - - -#### amazon\.aws - -* amazon\.aws\.ec2\_import\_image \- Manage AWS EC2 import image tasks -* amazon\.aws\.ec2\_import\_image\_info \- Gather information about import virtual machine tasks -* amazon\.aws\.ec2\_key\_info \- Gather information about EC2 key pairs in AWS -* amazon\.aws\.iam\_instance\_profile \- manage IAM instance profiles -* amazon\.aws\.iam\_instance\_profile\_info \- gather information on IAM instance profiles -* amazon\.aws\.rds\_global\_cluster\_info \- Obtain information about Aurora global database clusters - - -#### cisco\.ios - -* cisco\.ios\.ios\_service \- Resource module to configure service\. - - -#### cisco\.iosxr - -* cisco\.iosxr\.iosxr\_bgp\_templates \- Manages BGP templates resource module\. - - -#### cisco\.nxos - -* cisco\.nxos\.nxos\_fc\_interfaces \- Fc Interfaces resource module - - -#### cloudscale\_ch\.cloud - -* cloudscale\_ch\.cloud\.load\_balancer \- Manages load balancers on the cloudscale\.ch IaaS service -* cloudscale\_ch\.cloud\.load\_balancer\_health\_monitor \- Manages load balancers on the cloudscale\.ch IaaS service -* cloudscale\_ch\.cloud\.load\_balancer\_listener \- Manages load balancer listeners on the cloudscale\.ch IaaS service -* cloudscale\_ch\.cloud\.load\_balancer\_pool \- Manages load balancer pools on the cloudscale\.ch IaaS service -* cloudscale\_ch\.cloud\.load\_balancer\_pool\_member \- Manages load balancer pool members on the cloudscale\.ch IaaS service - - -#### community\.aws - -* community\.aws\.route53\_wait \- wait for changes in Amazons Route 53 DNS service to propagate - - -#### community\.dns - -* community\.dns\.nameserver\_info \- Look up nameservers for a DNS name -* community\.dns\.nameserver\_record\_info \- Look up all records of a type from all nameservers for a DNS name - - -#### community\.general - -* community\.general\.consul\_policy \- Manipulate Consul policies -* community\.general\.consul\_role \- Manipulate Consul roles -* community\.general\.facter\_facts \- Runs the discovery program C\(facter\) on the remote system and return Ansible facts -* community\.general\.gio\_mime \- Set default handler for MIME type\, for applications using Gnome GIO -* community\.general\.gitlab\_instance\_variable \- Creates\, updates\, or deletes GitLab instance variables -* community\.general\.gitlab\_merge\_request \- Create\, update\, or delete GitLab merge requests -* community\.general\.jenkins\_build\_info \- Get information about Jenkins builds -* community\.general\.keycloak\_authentication\_required\_actions \- Allows administration of Keycloak authentication required actions -* community\.general\.keycloak\_authz\_custom\_policy \- Allows administration of Keycloak client custom Javascript policies via Keycloak API -* community\.general\.keycloak\_authz\_permission \- Allows administration of Keycloak client authorization permissions via Keycloak API -* community\.general\.keycloak\_authz\_permission\_info \- Query Keycloak client authorization permissions information -* community\.general\.keycloak\_realm\_key \- Allows administration of Keycloak realm keys via Keycloak API -* community\.general\.keycloak\_user \- Create and configure a user in Keycloak -* community\.general\.lvg\_rename \- Renames LVM volume groups -* community\.general\.pnpm \- Manage node\.js packages with pnpm -* community\.general\.proxmox\_pool \- Pool management for Proxmox VE cluster -* community\.general\.proxmox\_pool\_member \- Add or delete members from Proxmox VE cluster pools -* community\.general\.proxmox\_vm\_info \- Retrieve information about one or more Proxmox VE virtual machines -* community\.general\.simpleinit\_msb \- Manage services on Source Mage GNU/Linux - - -#### community\.grafana - -* community\.grafana\.grafana\_organization\_user \- Manage Grafana Organization Users\. - - -#### community\.vmware - -* community\.vmware\.vcenter\_root\_password\_expiration \- root password expiration of vCSA -* community\.vmware\.vmware\_cluster\_drs\_recommendations \- Apply DRS Recommendations -* community\.vmware\.vmware\_host\_graphics \- Manage Host Graphic Settings -* community\.vmware\.vmware\_vasa \- Manage VMware Virtual Volumes storage provider -* community\.vmware\.vmware\_vasa\_info \- Gather information about vSphere VASA providers\. -* community\.vmware\.vmware\_vsan\_release\_catalog \- Uploads the vSAN Release Catalog - - -#### community\.zabbix - -* community\.zabbix\.zabbix\_regexp \- Create/update/delete Zabbix regular expression -* community\.zabbix\.zabbix\_settings \- Update Zabbix global settings\. -* community\.zabbix\.zabbix\_token \- Create/Update/Generate/Delete Zabbix token\. - - -#### containers\.podman - -* containers\.podman\.podman\_container\_exec \- Executes a command in a running container -* containers\.podman\.podman\_runlabel \- Run given label from given image - - -#### dellemc\.enterprise\_sonic - -* dellemc\.enterprise\_sonic\.sonic\_acl\_interfaces \- Manage access control list \(ACL\) to interface binding on SONiC -* dellemc\.enterprise\_sonic\.sonic\_bfd \- Manage BFD configuration on SONiC -* dellemc\.enterprise\_sonic\.sonic\_copp \- Manage CoPP configuration on SONiC -* dellemc\.enterprise\_sonic\.sonic\_dhcp\_relay \- Manage DHCP and DHCPv6 relay configurations on SONiC -* dellemc\.enterprise\_sonic\.sonic\_ip\_neighbor \- Manage IP neighbor global configuration on SONiC -* dellemc\.enterprise\_sonic\.sonic\_l2\_acls \- Manage Layer 2 access control lists \(ACL\) configurations on SONiC -* dellemc\.enterprise\_sonic\.sonic\_l3\_acls \- Manage Layer 3 access control lists \(ACL\) configurations on SONiC -* dellemc\.enterprise\_sonic\.sonic\_lldp\_global \- Manage Global LLDP configurations on SONiC -* dellemc\.enterprise\_sonic\.sonic\_logging \- Manage logging configuration on SONiC -* dellemc\.enterprise\_sonic\.sonic\_mac \- Manage MAC configuration on SONiC -* dellemc\.enterprise\_sonic\.sonic\_port\_group \- Manages port group configuration on SONiC -* dellemc\.enterprise\_sonic\.sonic\_route\_maps \- route map configuration handling for SONiC -* dellemc\.enterprise\_sonic\.sonic\_vlan\_mapping \- Configure vlan mappings on SONiC - - -#### dellemc\.openmanage - -* dellemc\.openmanage\.idrac\_network\_attributes \- This module allows you to configure the port and partition network attributes on the network interface cards\. -* dellemc\.openmanage\.ome\_alert\_policies \- Manage OME alert policies\. -* dellemc\.openmanage\.ome\_alert\_policies\_action\_info \- Get information on actions of alert policies\. -* dellemc\.openmanage\.ome\_alert\_policies\_category\_info \- Retrieves information of all OME alert policy categories\. -* dellemc\.openmanage\.ome\_alert\_policies\_info \- Retrieves information of one or more OME alert policies\. -* dellemc\.openmanage\.ome\_alert\_policies\_message\_id\_info \- Get message ID information of alert policies\. -* dellemc\.openmanage\.redfish\_firmware\_rollback \- To perform a component firmware rollback using component name\. - - -#### dellemc\.powerflex - -* dellemc\.powerflex\.snapshot\_policy \- Manage snapshot policies on Dell PowerFlex - - -#### dellemc\.unity - -* dellemc\.unity\.replication\_session \- Manage replication session on the Unity storage system - - -#### f5networks\.f5\_modules - -* f5networks\.f5\_modules\.bigip\_provision\_async \- Manage BIG\-IP module provisioning - - -#### fortinet\.fortimanager - -* fortinet\.fortimanager\.fmgr\_application\_casi\_profile \- Cloud Access Security Inspection\. -* fortinet\.fortimanager\.fmgr\_application\_casi\_profile\_entries \- Application entries\. -* fortinet\.fortimanager\.fmgr\_application\_internetservice \- Show Internet service application\. -* fortinet\.fortimanager\.fmgr\_application\_internetservice\_entry \- Entries in the Internet service database\. -* fortinet\.fortimanager\.fmgr\_application\_internetservicecustom \- Configure custom Internet service applications\. -* fortinet\.fortimanager\.fmgr\_application\_internetservicecustom\_disableentry \- Disable entries in the Internet service database\. -* fortinet\.fortimanager\.fmgr\_application\_internetservicecustom\_disableentry\_iprange \- IP ranges in the disable entry\. -* fortinet\.fortimanager\.fmgr\_application\_internetservicecustom\_entry \- Entries added to the Internet service database and custom database\. -* fortinet\.fortimanager\.fmgr\_application\_internetservicecustom\_entry\_portrange \- Port ranges in the custom entry\. -* fortinet\.fortimanager\.fmgr\_casb\_profile \- Configure CASB profile\. -* fortinet\.fortimanager\.fmgr\_casb\_profile\_saasapplication \- CASB profile SaaS application\. -* fortinet\.fortimanager\.fmgr\_casb\_profile\_saasapplication\_accessrule \- CASB profile access rule\. -* fortinet\.fortimanager\.fmgr\_casb\_profile\_saasapplication\_customcontrol \- CASB profile custom control\. -* fortinet\.fortimanager\.fmgr\_casb\_profile\_saasapplication\_customcontrol\_option \- CASB custom control option\. -* fortinet\.fortimanager\.fmgr\_casb\_saasapplication \- Configure CASB SaaS application\. -* fortinet\.fortimanager\.fmgr\_casb\_useractivity \- Configure CASB user activity\. -* fortinet\.fortimanager\.fmgr\_casb\_useractivity\_controloptions \- CASB control options\. -* fortinet\.fortimanager\.fmgr\_casb\_useractivity\_controloptions\_operations \- CASB control option operations\. -* fortinet\.fortimanager\.fmgr\_casb\_useractivity\_match \- CASB user activity match rules\. -* fortinet\.fortimanager\.fmgr\_casb\_useractivity\_match\_rules \- CASB user activity rules\. -* fortinet\.fortimanager\.fmgr\_cloud\_orchestaws \- no description -* fortinet\.fortimanager\.fmgr\_cloud\_orchestawsconnector \- no description -* fortinet\.fortimanager\.fmgr\_cloud\_orchestawstemplate\_autoscaleexistingvpc \- no description -* fortinet\.fortimanager\.fmgr\_cloud\_orchestawstemplate\_autoscalenewvpc \- no description -* fortinet\.fortimanager\.fmgr\_cloud\_orchestawstemplate\_autoscaletgwnewvpc \- no description -* fortinet\.fortimanager\.fmgr\_cloud\_orchestration \- no description -* fortinet\.fortimanager\.fmgr\_devprof\_log\_syslogd\_filter\_excludelist \- no description -* fortinet\.fortimanager\.fmgr\_devprof\_log\_syslogd\_filter\_excludelist\_fields \- no description -* fortinet\.fortimanager\.fmgr\_devprof\_log\_syslogd\_filter\_freestyle \- Free style filters\. -* fortinet\.fortimanager\.fmgr\_devprof\_log\_syslogd\_setting\_customfieldname \- Custom field name for CEF format logging\. -* fortinet\.fortimanager\.fmgr\_dnsfilter\_profile\_urlfilter \- URL filter settings\. -* fortinet\.fortimanager\.fmgr\_dnsfilter\_urlfilter \- Configure URL filter list\. -* fortinet\.fortimanager\.fmgr\_dnsfilter\_urlfilter\_entries \- DNS URL filter\. -* fortinet\.fortimanager\.fmgr\_dvmdb\_upgrade \- no description -* fortinet\.fortimanager\.fmgr\_emailfilter\_profile\_yahoomail \- Yahoo\! Mail\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_dataplan \- FortiExtender dataplan configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile \- FortiExtender extender profile configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular \- FortiExtender cellular configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_controllerreport \- FortiExtender controller report configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_modem1 \- Configuration options for modem 1\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_modem1\_autoswitch \- FortiExtender auto switch configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_modem2 \- Configuration options for modem 2\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_modem2\_autoswitch \- FortiExtender auto switch configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_smsnotification \- FortiExtender cellular SMS notification configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_smsnotification\_alert \- SMS alert list\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_cellular\_smsnotification\_receiver \- SMS notification receiver list\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_lanextension \- FortiExtender lan extension configuration\. -* fortinet\.fortimanager\.fmgr\_extensioncontroller\_extenderprofile\_lanextension\_backhaul \- LAN extension backhaul tunnel configuration\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6 \- Configure IPv6 access proxy\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway \- Set IPv4 API Gateway\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway6 \- Set IPv6 API Gateway\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway6\_quic \- QUIC setting\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway6\_realservers \- Select the real servers that this Access Proxy will distribute traffic to\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway6\_sslciphersuites \- SSL/TLS cipher suites to offer to a server\, ordered by priority\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway\_quic \- QUIC setting\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway\_realservers \- Select the real servers that this Access Proxy will distribute traffic to\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy6\_apigateway\_sslciphersuites \- SSL/TLS cipher suites to offer to a server\, ordered by priority\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy\_apigateway6\_quic \- QUIC setting\. -* fortinet\.fortimanager\.fmgr\_firewall\_accessproxy\_apigateway\_quic \- QUIC setting\. -* fortinet\.fortimanager\.fmgr\_firewall\_address6\_profilelist \- List of NSX service profiles that use this address\. -* fortinet\.fortimanager\.fmgr\_firewall\_address\_profilelist \- List of NSX service profiles that use this address\. -* fortinet\.fortimanager\.fmgr\_firewall\_casbprofile \- no description -* fortinet\.fortimanager\.fmgr\_firewall\_casbprofile\_saasapplication \- no description -* fortinet\.fortimanager\.fmgr\_firewall\_casbprofile\_saasapplication\_accessrule \- no description -* fortinet\.fortimanager\.fmgr\_firewall\_casbprofile\_saasapplication\_customcontrol \- no description -* fortinet\.fortimanager\.fmgr\_firewall\_casbprofile\_saasapplication\_customcontrol\_option \- no description -* fortinet\.fortimanager\.fmgr\_firewall\_explicitproxyaddress \- Explicit web proxy address configuration\. -* fortinet\.fortimanager\.fmgr\_firewall\_explicitproxyaddress\_headergroup \- HTTP header group\. -* fortinet\.fortimanager\.fmgr\_firewall\_explicitproxyaddrgrp \- Explicit web proxy address group configuration\. -* fortinet\.fortimanager\.fmgr\_firewall\_gtp\_messagefilter \- Message filter\. -* fortinet\.fortimanager\.fmgr\_firewall\_ippoolgrp \- Configure IPv4 pool groups\. -* fortinet\.fortimanager\.fmgr\_firewall\_networkservicedynamic \- Configure Dynamic Network Services\. -* fortinet\.fortimanager\.fmgr\_firewall\_vendormac \- Show vendor and the MAC address they have\. -* fortinet\.fortimanager\.fmgr\_firewall\_vip\_quic \- QUIC setting\. -* fortinet\.fortimanager\.fmgr\_fmg\_fabric\_authorization\_template \- no description -* fortinet\.fortimanager\.fmgr\_fmg\_fabric\_authorization\_template\_platforms \- no description -* fortinet\.fortimanager\.fmgr\_fmupdate\_fwmsetting\_upgradetimeout \- Configure the timeout value of image upgrade process\. -* fortinet\.fortimanager\.fmgr\_fsp\_vlan\_dynamicmapping\_interface\_vrrp \- VRRP configuration\. -* fortinet\.fortimanager\.fmgr\_fsp\_vlan\_dynamicmapping\_interface\_vrrp\_proxyarp \- VRRP Proxy ARP configuration\. -* fortinet\.fortimanager\.fmgr\_fsp\_vlan\_interface\_vrrp\_proxyarp \- VRRP Proxy ARP configuration\. -* fortinet\.fortimanager\.fmgr\_ips\_baseline\_sensor \- Configure IPS sensor\. -* fortinet\.fortimanager\.fmgr\_ips\_baseline\_sensor\_entries \- IPS sensor filter\. -* fortinet\.fortimanager\.fmgr\_ips\_baseline\_sensor\_entries\_exemptip \- Traffic from selected source or destination IP addresses is exempt from this signature\. -* fortinet\.fortimanager\.fmgr\_ips\_baseline\_sensor\_filter \- no description -* fortinet\.fortimanager\.fmgr\_ips\_baseline\_sensor\_override \- no description -* fortinet\.fortimanager\.fmgr\_ips\_baseline\_sensor\_override\_exemptip \- no description -* fortinet\.fortimanager\.fmgr\_log\_npuserver \- Configure all the log servers and create the server groups\. -* fortinet\.fortimanager\.fmgr\_log\_npuserver\_servergroup \- create server group\. -* fortinet\.fortimanager\.fmgr\_log\_npuserver\_serverinfo \- configure server info\. -* fortinet\.fortimanager\.fmgr\_pkg\_firewall\_explicitproxypolicy \- Configure Explicit proxy policies\. -* fortinet\.fortimanager\.fmgr\_pkg\_firewall\_explicitproxypolicy\_identitybasedpolicy \- Identity\-based policy\. -* fortinet\.fortimanager\.fmgr\_pkg\_firewall\_explicitproxypolicy\_sectionvalue \- Configure Explicit proxy policies\. -* fortinet\.fortimanager\.fmgr\_pkg\_firewall\_hyperscalepolicy \- Configure IPv4/IPv6 policies\. -* fortinet\.fortimanager\.fmgr\_pkg\_firewall\_hyperscalepolicy46 \- Configure IPv4 to IPv6 policies\. -* fortinet\.fortimanager\.fmgr\_pkg\_firewall\_hyperscalepolicy6 \- Configure IPv6 policies\. -* fortinet\.fortimanager\.fmgr\_pkg\_firewall\_hyperscalepolicy64 \- Configure IPv6 to IPv4 policies\. -* fortinet\.fortimanager\.fmgr\_pkg\_user\_nacpolicy \- Configure NAC policy matching pattern to identify matching NAC devices\. -* fortinet\.fortimanager\.fmgr\_pm\_config\_meta\_reference \- no description -* fortinet\.fortimanager\.fmgr\_pm\_config\_pblock\_firewall\_consolidated\_policy \- Configure consolidated IPv4/IPv6 policies\. -* fortinet\.fortimanager\.fmgr\_pm\_config\_pblock\_firewall\_consolidated\_policy\_sectionvalue \- Configure consolidated IPv4/IPv6 policies\. -* fortinet\.fortimanager\.fmgr\_pm\_config\_pblock\_firewall\_policy6 \- Configure IPv6 policies\. -* fortinet\.fortimanager\.fmgr\_pm\_config\_pblock\_firewall\_policy6\_sectionvalue \- Configure IPv6 policies\. -* fortinet\.fortimanager\.fmgr\_pm\_devprof\_scopemember \- no description -* fortinet\.fortimanager\.fmgr\_pm\_pkg\_scopemember \- Policy package or folder\. -* fortinet\.fortimanager\.fmgr\_pm\_wanprof\_scopemember \- no description -* fortinet\.fortimanager\.fmgr\_securityconsole\_install\_objects\_v2 \- no description -* fortinet\.fortimanager\.fmgr\_securityconsole\_template\_cli\_preview \- no description -* fortinet\.fortimanager\.fmgr\_switchcontroller\_acl\_group \- Configure ACL groups to be applied on managed FortiSwitch ports\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_acl\_ingress \- Configure ingress ACL policies to be applied on managed FortiSwitch ports\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_acl\_ingress\_action \- ACL actions\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_acl\_ingress\_classifier \- ACL classifiers\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_dynamicportpolicy \- Configure Dynamic port policy to be applied on the managed FortiSwitch ports through DPP device\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_dynamicportpolicy\_policy \- Port policies with matching criteria and actions\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_fortilinksettings \- Configure integrated FortiLink settings for FortiSwitch\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_fortilinksettings\_nacports \- NAC specific configuration\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_macpolicy \- Configure MAC policy to be applied on the managed FortiSwitch devices through NAC device\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_managedswitch\_dhcpsnoopingstaticclient \- Configure FortiSwitch DHCP snooping static clients\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_managedswitch\_ports\_dhcpsnoopoption82override \- Configure DHCP snooping option 82 override\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_managedswitch\_routeoffloadrouter \- Configure route offload MCLAG IP address\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_managedswitch\_staticmac \- Configuration method to edit FortiSwitch Static and Sticky MAC\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_managedswitch\_stpinstance \- Configuration method to edit Spanning Tree Protocol -* fortinet\.fortimanager\.fmgr\_switchcontroller\_ptp\_profile \- Global PTP profile\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_switchinterfacetag \- Configure switch object tags\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_trafficpolicy \- Configure FortiSwitch traffic policy\. -* fortinet\.fortimanager\.fmgr\_switchcontroller\_vlanpolicy \- Configure VLAN policy to be applied on the managed FortiSwitch ports through dynamic\-port\-policy\. -* fortinet\.fortimanager\.fmgr\_sys\_cloud\_orchest \- no description -* fortinet\.fortimanager\.fmgr\_system\_csf \- Add this device to a Security Fabric or set up a new Security Fabric on this device\. -* fortinet\.fortimanager\.fmgr\_system\_csf\_fabricconnector \- Fabric connector configuration\. -* fortinet\.fortimanager\.fmgr\_system\_csf\_trustedlist \- Pre\-authorized and blocked security fabric nodes\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_backgroundssescan \- Configure driver background scan for SSE\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_dosoptions \- NPU DoS configurations\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_dswdtsprofile \- Configure NPU DSW DTS profile\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_dswqueuedtsprofile \- Configure NPU DSW Queue DTS profile\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_hpe \- Host protection engine configuration\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_ipreassembly \- IP reassebmly engine configuration\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_npqueues \- Configure queue assignment on NP7\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_npqueues\_ethernettype \- Configure a NP7 QoS Ethernet Type\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_npqueues\_ipprotocol \- Configure a NP7 QoS IP Protocol\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_npqueues\_ipservice \- Configure a NP7 QoS IP Service\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_npqueues\_profile \- Configure a NP7 class profile\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_npqueues\_scheduler \- Configure a NP7 QoS Scheduler\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_portpathoption \- Configure port using NPU or Intel\-NIC\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_ssehascan \- Configure driver HA scan for SSE\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_swtrhash \- Configure switch traditional hashing\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_tcptimeoutprofile \- Configure TCP timeout profile\. -* fortinet\.fortimanager\.fmgr\_system\_npu\_udptimeoutprofile \- Configure UDP timeout profile\. -* fortinet\.fortimanager\.fmgr\_system\_objecttag \- Configure object tags\. -* fortinet\.fortimanager\.fmgr\_system\_sdnconnector\_compartmentlist \- Configure OCI compartment list\. -* fortinet\.fortimanager\.fmgr\_system\_sdnconnector\_ociregionlist \- Configure OCI region list\. -* fortinet\.fortimanager\.fmgr\_system\_sdnproxy \- Configure SDN proxy\. -* fortinet\.fortimanager\.fmgr\_system\_socfabric\_trustedlist \- Pre\-authorized security fabric nodes -* fortinet\.fortimanager\.fmgr\_um\_image\_upgrade \- The older API for updating the firmware of specific device\. -* fortinet\.fortimanager\.fmgr\_um\_image\_upgrade\_ext \- Update the firmware of specific device\. -* fortinet\.fortimanager\.fmgr\_user\_certificate \- Configure certificate users\. -* fortinet\.fortimanager\.fmgr\_user\_deviceaccesslist \- Configure device access control lists\. -* fortinet\.fortimanager\.fmgr\_user\_deviceaccesslist\_devicelist \- Device list\. -* fortinet\.fortimanager\.fmgr\_user\_flexvm \- no description -* fortinet\.fortimanager\.fmgr\_user\_json \- no description -* fortinet\.fortimanager\.fmgr\_user\_saml\_dynamicmapping \- SAML server entry configuration\. -* fortinet\.fortimanager\.fmgr\_virtualpatch\_profile \- Configure virtual\-patch profile\. -* fortinet\.fortimanager\.fmgr\_virtualpatch\_profile\_exemption \- Exempt devices or rules\. -* fortinet\.fortimanager\.fmgr\_vpnsslweb\_portal\_landingpage \- Landing page options\. -* fortinet\.fortimanager\.fmgr\_vpnsslweb\_portal\_landingpage\_formdata \- Form data\. -* fortinet\.fortimanager\.fmgr\_vpnsslweb\_virtualdesktopapplist \- SSL\-VPN virtual desktop application list\. -* fortinet\.fortimanager\.fmgr\_vpnsslweb\_virtualdesktopapplist\_apps \- Applications\. -* fortinet\.fortimanager\.fmgr\_wireless\_accesscontrollist \- Configure WiFi bridge access control list\. -* fortinet\.fortimanager\.fmgr\_wireless\_accesscontrollist\_layer3ipv4rules \- AP ACL layer3 ipv4 rule list\. -* fortinet\.fortimanager\.fmgr\_wireless\_accesscontrollist\_layer3ipv6rules \- AP ACL layer3 ipv6 rule list\. -* fortinet\.fortimanager\.fmgr\_wireless\_address \- Configure the client with its MAC address\. -* fortinet\.fortimanager\.fmgr\_wireless\_addrgrp \- Configure the MAC address group\. -* fortinet\.fortimanager\.fmgr\_wireless\_ssidpolicy \- Configure WiFi SSID policies\. -* fortinet\.fortimanager\.fmgr\_wireless\_syslogprofile \- Configure Wireless Termination Points - - -#### inspur\.ispim - -* inspur\.ispim\.hba\_info \- Get CPU information -* inspur\.ispim\.update\_psu \- Update PSU - - -#### netapp\.ontap - -* netapp\.ontap\.na\_ontap\_active\_directory\_domain\_controllers \- NetApp ONTAP configure active directory preferred domain controllers -* netapp\.ontap\.na\_ontap\_ems\_config \- NetApp ONTAP module to modify EMS configuration\. - - -#### netbox\.netbox - -* netbox\.netbox\.netbox\_config\_template \- Creates\, updates\, or removed a config template from NetBox - - -#### ngine\_io\.exoscale - -* ngine\_io\.exoscale\.instance\_rdns\_record \- Manages reverse DNS records for Exoscale compute instances\. - - -#### purestorage\.flasharray - -* purestorage\.flasharray\.purefa\_file \- Manage FlashArray File Copies -* purestorage\.flasharray\.purefa\_logging \- Manage Pure Storage FlashArray Audit and Session logs - - -#### sensu\.sensu\_go - -* sensu\.sensu\_go\.pipeline \- Manage Sensu pipelines\. -* sensu\.sensu\_go\.pipeline\_info \- List Sensu pipelines\. - - -#### t\_systems\_mms\.icinga\_director - -* t\_systems\_mms\.icinga\_director\.icinga\_deploy \- Trigger deployment in Icinga2 -* t\_systems\_mms\.icinga\_director\.icinga\_deploy\_info \- Get deployment information through the director API - - -#### theforeman\.foreman - -* theforeman\.foreman\.smart\_class\_parameter\_override\_value \- Manage Smart Class Parameter Override Values -* theforeman\.foreman\.wait\_for\_task \- Wait for a task - - -#### vultr\.cloud - -* vultr\.cloud\.bare\_metal \- Manages bare metal machines on Vultr\. -* vultr\.cloud\.vpc2 \- Manages VPCs 2\.0 on Vultr -* vultr\.cloud\.vpc2\_info \- Gather information about the Vultr VPCs 2\.0 - - -### New Roles - -* dellemc\.openmanage\.idrac\_attributes \- Role to configure iDRAC attributes\. -* dellemc\.openmanage\.idrac\_bios \- Role to modify BIOS attributes\, clear pending BIOS attributes\, and reset the BIOS to default settings\. -* dellemc\.openmanage\.idrac\_boot \- Configure the boot order settings -* dellemc\.openmanage\.idrac\_job\_queue \- Role to manage the iDRAC lifecycle controller job queue\. -* dellemc\.openmanage\.idrac\_reset \- Role to reset and restart iDRAC \(iDRAC8 and iDRAC9 only\) for Dell PowerEdge servers\. -* dellemc\.openmanage\.idrac\_storage\_controller \- Role to configure the physical disk\, virtual disk\, and storage controller settings on iDRAC9 based PowerEdge servers\. - - -### Unchanged Collections - -* ansible\.posix \(still version 1\.5\.4\) -* community\.azure \(still version 2\.0\.0\) -* community\.okd \(still version 2\.3\.0\) -* community\.proxysql \(still version 1\.5\.1\) -* community\.rabbitmq \(still version 1\.2\.3\) -* community\.sap\_libs \(still version 1\.4\.1\) -* frr\.frr \(still version 2\.0\.2\) -* gluster\.gluster \(still version 1\.0\.2\) -* hpe\.nimble \(still version 1\.1\.4\) -* ibm\.qradar \(still version 2\.1\.0\) -* infinidat\.infinibox \(still version 1\.3\.12\) -* infoblox\.nios\_modules \(still version 1\.5\.0\) -* inspur\.sm \(still version 2\.3\.0\) -* kubernetes\.core \(still version 2\.4\.0\) -* netapp\.elementsw \(still version 21\.7\.0\) -* netapp\.storagegrid \(still version 21\.11\.1\) -* netapp\_eseries\.santricity \(still version 1\.4\.0\) -* ngine\_io\.cloudstack \(still version 2\.3\.0\) -* openstack\.cloud \(still version 2\.1\.0\) -* openvswitch\.openvswitch \(still version 2\.1\.1\) -* splunk\.es \(still version 2\.1\.0\) -* vmware\.vmware\_rest \(still version 2\.3\.1\) diff --git a/CHANGELOG-v9.rst b/CHANGELOG-v9.rst deleted file mode 100644 index 156f5870c..000000000 --- a/CHANGELOG-v9.rst +++ /dev/null @@ -1,6659 +0,0 @@ -======================= -Ansible 9 Release Notes -======================= - -This changelog describes changes since Ansible 8.0.0. - -.. contents:: - :depth: 2 - -v9.5.1 -====== - -.. contents:: - :local: - :depth: 2 - -Release Summary ---------------- - -Release Date: 2024-04-24 - -`Porting Guide `_ - -Please note that this release replaces a mistakenly released 9.5.0 that included a breaking change. The 9.5.0 release has been yanked from PyPI and is not part of the official release history. - -Ansible-core ------------- - -Ansible 9.5.1 contains ansible-core version 2.16.6. -This is a newer version than version 2.16.5 contained in the previous Ansible release. - -The changes are reported in the combined changelog below. - -Changed Collections -------------------- - -If not mentioned explicitly, the changes are reported in the combined changelog below. - -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| Collection | Ansible 9.4.0 | Ansible 9.5.1 | Notes | -+==========================================+===============+===============+==============================================================================================================================+ -| amazon.aws | 7.4.0 | 7.5.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.aci | 2.8.0 | 2.9.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.dnac | 6.13.1 | 6.13.3 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.intersight | 2.0.7 | 2.0.8 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ise | 2.8.0 | 2.8.1 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.meraki | 2.17.2 | 2.18.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.mso | 2.5.0 | 2.6.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.aws | 7.1.0 | 7.2.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.crypto | 2.18.0 | 2.19.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.dns | 2.8.3 | 2.9.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.docker | 3.8.1 | 3.9.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.general | 8.5.0 | 8.6.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.hrobot | 1.9.1 | 1.9.2 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.library_inventory_filtering_v1 | 1.0.0 | 1.0.1 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.mongodb | 1.7.2 | 1.7.3 | There are no changes recorded in the changelog. | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.rabbitmq | 1.2.3 | 1.3.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.routeros | 2.14.0 | 2.15.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.vmware | 4.2.0 | 4.3.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| containers.podman | 1.12.0 | 1.13.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.powerflex | 2.2.0 | 2.3.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| fortinet.fortios | 2.3.5 | 2.3.6 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| infinidat.infinibox | 1.4.3 | 1.4.5 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| netapp.ontap | 22.10.0 | 22.11.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flashblade | 1.16.0 | 1.17.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ - -Major Changes -------------- - -containers.podman -~~~~~~~~~~~~~~~~~ - -- Add quadlet support for Podman modules - -fortinet.fortios -~~~~~~~~~~~~~~~~ - -- Add notes for backup modules in the documentation in both monitor and monitor_fact modules. -- Supported new FOS versions 7.4.2 and 7.4.3, and support data type mac_address in the collection. -- Update the documentation for the supported versions from latest to a fix version number. -- Update the required ansible version to 2.15. - -Minor Changes -------------- - -amazon.aws -~~~~~~~~~~ - -- iam_user_info - Add ``login_profile`` to return info that is get from a user, to know if they can login from AWS console (https://github.com/ansible-collections/amazon.aws/pull/2012). -- module_utils.iam - refactored normalization functions to use ``boto3_resource_to_ansible_dict()`` and ``boto3_resource_list_to_ansible_dict()`` (https://github.com/ansible-collections/amazon.aws/pull/2006). -- module_utils.transformations - add ``boto3_resource_to_ansible_dict()`` and ``boto3_resource_list_to_ansible_dict()`` helpers (https://github.com/ansible-collections/amazon.aws/pull/2006). - -cisco.aci -~~~~~~~~~ - -- Add Authentification option for EIGRP interface profile. -- Add L3out Floating SVI modules (aci_l3out_floating_svi, aci_l3out_floating_svi_path, aci_l3out_floating_svi_path_secondary_ip and aci_l3out_floating_svi_secondary_ip) (#478) -- Add No-verification flag option to reduce the number of API calls. If true, a verifying GET will not be sent after a POST update to APIC -- Add access spine interface selector and port block binding in aci_access_port_block_to_access_port -- Add aci_access_spine_interface_selector module -- Add aci_action_rule_additional_communities module -- Add aci_action_rule_set_as_path and aci_action_rule_set_as_path_asn modules -- Add aci_bgp_peer_prefix_policy, aci_bgp_route_summarization_policy and aci_bgp_address_family_context_policy modules -- Add aci_fabric_pod, aci_fabric_pod_external_tep, aci_fabric_pod_profile, aci_fabric_pod_remote_pool modules (#558) -- Add aci_hsrp_interface_policy, aci_l3out_hsrp_group, aci_l3out_hsrp_interface_profile and aci_l3out_hsrp_secondary_vip modules (#505) -- Add aci_interface_policy_eigrp (class:eigrpIfPol) module -- Add aci_interface_policy_pim module -- Add aci_interface_policy_storm_control module -- Add aci_keychain_policy and aci_key_policy modules -- Add aci_l3out_bfd_multihop_interface_profile, aci_l3out_bfd_interface_profile, aci_interface_policy_bfd_multihop, aci_interface_policy_bfd and aci_bfd_multihop_node_policy modules (#492) -- Add aci_l3out_dhcp_relay_label, aci_dhcp_option_policy and aci_dhcp_option modules -- Add aci_l3out_eigrp_interface_profile module -- Add aci_listify filter plugin to flattens nested dictionaries -- Add aci_netflow_exporter_policy module -- Add aci_netflow_monitor_policy and aci_netflow_record_policy modules -- Add aci_netflow_monitor_to_exporter module -- Add aci_node_block module -- Add aci_pim_route_map_policy and aci_pim_route_map_entry modules -- Add aci_qos_custom_policy and aci_qos_dscp_class modules -- Add aci_qos_dot1p_class module -- Add action rules attributes to aci_tenant_action_rule_profile. -- Add auto to speed attribute options in aci_interface_policy_link_level module (#577) -- Add missing options to aci_bd module -- Add modules aci_bd_to_netflow_monitor_policy and aci_bd_rogue_exception_mac (#600) -- Add modules for Fabric External Connection Policies and its childs -- Add option to set delimiter to _ in aci_epg_to_domain module -- Add qos_custom_policy, pim_interface_policy and igmp_interface_policy as new child_classes for aci_l3out_logical_interface_profile. -- Add support for annotation in aci_rest module (#437) -- Add support for block statements in useg attributes with the aci_epg_useg_attribute_block_statement module -- Add support for configuration of access switch policy groups with aci_access_switch_policy_group module -- Add support for configuration of certificate authorities in aci_aaa_certificate_authority -- Add support for configuration of fabric management access policies in aci_fabric_management_access -- Add support for configuration of vrf multicast with aci_vrf_multicast module -- Add support for configuring Azure cloud subnets using the aci_cloud_subnet module -- Add support for encap scope in aci_l3out_interface -- Add support for https ssl cipher configuration in aci_fabric_management_access_https_cipher -- Add support for infra l3out nodes bgp-evpn loopback, mpls transport loopback and segment id in aci_l3out_logical_node -- Add support for infra sr mpls micro bfd in aci_l3out_interface -- Add support for intra epg, taboo, and contract interface in aci_epg_to_contract -- Add support for key ring configuration in aci_aaa_key_ring -- Add support for mac and description in aci_l3out_interface -- Add support for mpls custom qos policy for infra sr mpls l3outs node profiles in aci_l3out_logical_node_profile -- Add support for security default settings configuration in aci_aaa_security_default_settings -- Add support for simple statements in useg attributes with the aci_epg_useg_attribute_simple_statement module -- Add support for sr-mpls bgpInfraPeerP and bgp_password in aci_l3out_bgp_peer module (#543) -- Add support for sr-mpls in aci_l3out module -- Add support for sr-mpls l3out to infra l3out in aci_l3out_to_sr_mpls_infra_l3out -- Add support for subject labels for EPG, EPG Contract, ESG, Contract Subject, L2Out External EPG, L3out External EPG, and L3out External EPG Contract with the aci_subject_label module -- Add support for taboo contract, contract interface and intra_epg contract in aci_l3out_extepg_to_contract -- Add support for useg default block statement configuration for useg epg in aci_epg -- Modify child class node block conditions to be optional in aci_switch_leaf_selector - -cisco.dnac -~~~~~~~~~~ - -- Added a method to validate IP addresses. -- Added the op_modifies=True when calling SDK APIs in the workflow manager modules. -- Adding support to importing a template using JSON file -- Changes in discovery workflow manager modules relating to different states of the discovery job -- Changes in inventory and swim workflow manager modules. -- Fixed a minor issue in the site workflow manager module. -- Updating galaxy.yml ansible.utils dependencies. - -cisco.meraki -~~~~~~~~~~~~ - -- Ansible collection now support v1.44.1 of Dashboard Api. -- administered_licensing_subscription_entitlements_info - new plugin. -- administered_licensing_subscription_subscriptions_bind - new plugin. -- administered_licensing_subscription_subscriptions_claim - new plugin. -- administered_licensing_subscription_subscriptions_claim_key_validate - new plugin. -- administered_licensing_subscription_subscriptions_compliance_statuses_info - new plugin. -- administered_licensing_subscription_subscriptions_info - new plugin. -- devices_appliance_radio_settings - new plugin. -- devices_appliance_radio_settings_info - new plugin. -- devices_live_tools_arp_table - new plugin. -- devices_live_tools_arp_table_info - new plugin. -- devices_live_tools_cable_test - new plugin. -- devices_live_tools_cable_test_info - new plugin. -- devices_live_tools_throughput_test - new plugin. -- devices_live_tools_throughput_test_info - new plugin. -- devices_live_tools_wake_on_lan - new plugin. -- devices_live_tools_wake_on_lan_info - new plugin. -- devices_wireless_alternate_management_interface_ipv6 - new plugin. -- networks_appliance_rf_profiles - new plugin. -- networks_appliance_rf_profiles_info - new plugin. -- networks_appliance_traffic_shaping_vpn_exclusions - new plugin. -- networks_sm_devices_install_apps - new plugin. -- networks_sm_devices_reboot - new plugin. -- networks_sm_devices_shutdown - new plugin. -- networks_sm_devices_uninstall_apps - new plugin. -- networks_vlan_profiles - new plugin. -- networks_vlan_profiles_assignments_by_device_info - new plugin. -- networks_vlan_profiles_assignments_reassign - new plugin. -- networks_vlan_profiles_info - new plugin. -- networks_wireless_ethernet_ports_profiles - new plugin. -- networks_wireless_ethernet_ports_profiles_assign - new plugin. -- networks_wireless_ethernet_ports_profiles_info - new plugin. -- networks_wireless_ethernet_ports_profiles_set_default - new plugin. -- organizations_appliance_traffic_shaping_vpn_exclusions_by_network_info - new plugin. -- organizations_appliance_uplinks_statuses_overview_info - new plugin. -- organizations_appliance_uplinks_usage_by_network_info - new plugin. -- organizations_camera_boundaries_areas_by_device_info - new plugin. -- organizations_camera_boundaries_lines_by_device_info - new plugin. -- organizations_camera_detections_history_by_boundary_by_interval_info - new plugin. -- organizations_camera_permissions_info - new plugin. -- organizations_camera_roles - new plugin. -- organizations_camera_roles_info - new plugin. -- organizations_devices_availabilities_change_history_info - new plugin. -- organizations_devices_boots_history_info - new plugin. -- organizations_sm_admins_roles - new plugin. -- organizations_sm_admins_roles_info - new plugin. -- organizations_sm_sentry_policies_assignments - new plugin. -- organizations_sm_sentry_policies_assignments_by_network_info - new plugin. -- organizations_summary_top_networks_by_status_info - new plugin. -- organizations_webhooks_callbacks_statuses_info - new plugin. -- organizations_wireless_devices_channel_utilization_by_device_info - new plugin. -- organizations_wireless_devices_channel_utilization_by_network_info - new plugin. -- organizations_wireless_devices_channel_utilization_history_by_device_by_interval_info - new plugin. -- 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. - -cisco.mso -~~~~~~~~~ - -- Add Azure Cloud site support to mso_schema_site_contract_service_graph -- Add Azure Cloud site support to mso_schema_site_service_graph -- Add functionality to resolve same name in remote and local user. -- Add l3out_template and l3out_schema arguments to mso_schema_site_external_epg (#394) -- Add mso_schema_site_contract_service_graph module to manage site contract service graph -- Add mso_schema_site_contract_service_graph_listener module to manage Azure site contract service graph listeners and update other modules -- Add new parameter remote_user to add multiple remote users associated with multiple login domains -- Add support for replacing all existing contracts with new provided contracts in a single operation with one request and adding/removing multiple contracts in multiple operations with a single request in mso_schema_template_anp_epg_contract module -- Add support for replacing all existing static ports with new provided static ports in a single operation with one request and adding/removing multiple static ports in multiple operations with a single request in mso_schema_template_anp_epg_staticport module -- Add support for required attributes introduced in NDO 4.2 for mso_schema_site_anp_epg_domain -- Support for creation of schemas without templates with the mso_schema module - -community.aws -~~~~~~~~~~~~~ - -- glue_job - add support for 2 new instance types which are G.4X and G.8X (https://github.com/ansible-collections/community.aws/pull/2048). -- msk_cluster - Support for additional ``m5`` and ``m7g`` types of MSK clusters (https://github.com/ansible-collections/community.aws/pull/1947). - -community.crypto -~~~~~~~~~~~~~~~~ - -- When using cryptography >= 42.0.0, use offset-aware ``datetime.datetime`` objects (with timezone UTC) instead of offset-naive UTC timestamps (https://github.com/ansible-collections/community.crypto/issues/726, https://github.com/ansible-collections/community.crypto/pull/727). -- openssh_cert - avoid UTC functions deprecated in Python 3.12 when using Python 3 (https://github.com/ansible-collections/community.crypto/pull/727). - -community.docker -~~~~~~~~~~~~~~~~ - -- The EE requirements now include PyYAML, since the ``docker_compose_v2*`` modules depend on it when the ``definition`` option is used. This should not have a noticable effect on generated EEs since ansible-core itself depends on PyYAML as well, and ansible-builder explicitly ignores this dependency (https://github.com/ansible-collections/community.docker/pull/832). -- docker_compose_v2* - the new option ``check_files_existing`` allows to disable the check for one of the files ``compose.yaml``, ``compose.yml``, ``docker-compose.yaml``, and ``docker-compose.yml`` in ``project_src`` if ``files`` is not specified. This is necessary if a non-standard compose filename is specified through other means, like the ``COMPOSE_FILE`` environment variable (https://github.com/ansible-collections/community.docker/issues/838, https://github.com/ansible-collections/community.docker/pull/839). -- docker_compose_v2* modules - allow to provide an inline definition of the compose content instead of having to provide a ``project_src`` directory with the compose file written into it (https://github.com/ansible-collections/community.docker/issues/829, https://github.com/ansible-collections/community.docker/pull/832). -- vendored Docker SDK for Python - remove unused code that relies on functionality deprecated in Python 3.12 (https://github.com/ansible-collections/community.docker/pull/834). - -community.general -~~~~~~~~~~~~~~~~~ - -- Use offset-aware ``datetime.datetime`` objects (with timezone UTC) instead of offset-naive UTC timestamps, which are deprecated in Python 3.12 (https://github.com/ansible-collections/community.general/pull/8222). -- apt_rpm - add new states ``latest`` and ``present_not_latest``. The value ``latest`` is equivalent to the current behavior of ``present``, which will upgrade a package if a newer version exists. ``present_not_latest`` does what most users would expect ``present`` to do: it does not upgrade if the package is already installed. The current behavior of ``present`` will be deprecated in a later version, and eventually changed to that of ``present_not_latest`` (https://github.com/ansible-collections/community.general/issues/8217, https://github.com/ansible-collections/community.general/pull/8247). -- bitwarden lookup plugin - add support to filter by organization ID (https://github.com/ansible-collections/community.general/pull/8188). -- filesystem - add bcachefs support (https://github.com/ansible-collections/community.general/pull/8126). -- ini_file - add an optional parameter ``section_has_values``. If the target ini file contains more than one ``section``, use ``section_has_values`` to specify which one should be updated (https://github.com/ansible-collections/community.general/pull/7505). -- java_cert - add ``cert_content`` argument (https://github.com/ansible-collections/community.general/pull/8153). -- keycloak_client, keycloak_clientscope, keycloak_clienttemplate - added ``docker-v2`` protocol support, enhancing alignment with Keycloak's protocol options (https://github.com/ansible-collections/community.general/issues/8215, https://github.com/ansible-collections/community.general/pull/8216). -- nmcli - adds OpenvSwitch support with new ``type`` values ``ovs-port``, ``ovs-interface``, and ``ovs-bridge``, and new ``slave_type`` value ``ovs-port`` (https://github.com/ansible-collections/community.general/pull/8154). -- osx_defaults - add option ``check_types`` to enable changing the type of existing defaults on the fly (https://github.com/ansible-collections/community.general/pull/8173). -- passwordstore lookup - add ``missing_subkey`` parameter defining the behavior of the lookup when a passwordstore subkey is missing (https://github.com/ansible-collections/community.general/pull/8166). -- portage - adds the possibility to explicitely tell portage to write packages to world file (https://github.com/ansible-collections/community.general/issues/6226, https://github.com/ansible-collections/community.general/pull/8236). -- redfish_command - add command ``ResetToDefaults`` to reset manager to default state (https://github.com/ansible-collections/community.general/issues/8163). -- redfish_info - add boolean return value ``MultipartHttpPush`` to ``GetFirmwareUpdateCapabilities`` (https://github.com/ansible-collections/community.general/issues/8194, https://github.com/ansible-collections/community.general/pull/8195). -- ssh_config - allow ``accept-new`` as valid value for ``strict_host_key_checking`` (https://github.com/ansible-collections/community.general/pull/8257). - -community.rabbitmq -~~~~~~~~~~~~~~~~~~ - -- rabbitmq_user - add support to user manipulation through RabbitMQ API (https://github.com/ansible-collections/community.rabbitmq/issues/76) - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- api_info, api_modify - Add RouterOS 7.x support to ``/mpls ldp`` path (https://github.com/ansible-collections/community.routeros/pull/271). -- api_info, api_modify - add ``/ip route rule`` path for RouterOS 6.x (https://github.com/ansible-collections/community.routeros/pull/278). -- api_info, api_modify - add ``/routing filter`` path for RouterOS 6.x (https://github.com/ansible-collections/community.routeros/pull/279). -- api_info, api_modify - add default value for ``from-pool`` field in ``/ipv6 address`` (https://github.com/ansible-collections/community.routeros/pull/270). -- api_info, api_modify - add missing path ``/interface pppoe-server server`` (https://github.com/ansible-collections/community.routeros/pull/273). -- api_info, api_modify - add missing path ``/ip dhcp-relay`` (https://github.com/ansible-collections/community.routeros/pull/276). -- api_info, api_modify - add missing path ``/queue simple`` (https://github.com/ansible-collections/community.routeros/pull/269). -- api_info, api_modify - add missing path ``/queue type`` (https://github.com/ansible-collections/community.routeros/pull/274). -- api_info, api_modify - add missing paths ``/routing bgp aggregate``, ``/routing bgp network`` and ``/routing bgp peer`` (https://github.com/ansible-collections/community.routeros/pull/277). -- api_info, api_modify - add support for paths ``/mpls interface``, ``/mpls ldp accept-filter``, ``/mpls ldp advertise-filter`` and ``mpls ldp interface`` (https://github.com/ansible-collections/community.routeros/pull/272). - -community.vmware -~~~~~~~~~~~~~~~~ - -- Document that all parameters and VMware object names are case sensitive (https://github.com/ansible-collections/community.vmware/issues/2019). -- Drop the outdated (and actually unmaintained) scenario guides (https://github.com/ansible-collections/community.vmware/pull/2022). -- vmware_dvswitch - Add switchIpAddress/switch_ip parameter for netflow config -- vmware_guest_tools_info - Use `toolsVersionStatus2` instead of `toolsVersionStatus` (https://github.com/ansible-collections/community.vmware/issues/2033). - -containers.podman -~~~~~~~~~~~~~~~~~ - -- CI - Fix rootfs test in CI -- CI - add custom podman path to tasks -- CI - add parametrized executables to tests -- podman_container - Add pasta as default network mode after v5 -- podman_container_exec - Return data for podman exec module -- podman_generate_systemd - Fix broken example for podman_generate_systemd (#708) -- podman_login - Update podman_login.py -- podman_play - Add support for kube yaml files with multi-documents (#724) -- podman_play - Update the logic for deleting pods/containers in podman_play -- podman_pod_info - handle return being list in Podman 5 (#713) - -dellemc.powerflex -~~~~~~~~~~~~~~~~~ - -- Added support for PowerFlex ansible modules and roles on Azure. -- Added support for resource group provisioning to validate, deploy, edit, add nodes and delete a resource group. -- The Info module is enhanced to list the firmware repositories. - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_cifs - new option `offline_files` added in REST, requires ONTAP 9.10 or later. -- na_ontap_net_ifgrp - updated documentation for parameter `name`. -- na_ontap_vserver_audit - new options `schedule.*` added under `log.rotation`, requires ONTAP 9.6 or later. - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purefb_bucket - Add support for strict 17a-4 WORM compliance. -- purefb_connect - Increase Fan-In and Fan-Out maximums -- purefb_fs - Add ``group_ownership`` parameter from Purity//FB 4.4.0. -- purefb_info - Show array network access policy from Purity//FB 4.4.0 -- purefb_policy - Add support for network access policies from Purity//FB 4.4.0 - -Deprecated Features -------------------- - -community.crypto -~~~~~~~~~~~~~~~~ - -- acme.backends module utils - from community.crypto on, all implementations of ``CryptoBackend`` must override ``get_ordered_csr_identifiers()``. The current default implementation, which simply sorts the result of ``get_csr_identifiers()``, will then be removed (https://github.com/ansible-collections/community.crypto/pull/725). - -community.general -~~~~~~~~~~~~~~~~~ - -- hipchat callback plugin - the hipchat service has been discontinued and the self-hosted variant has been End of Life since 2020. The callback plugin is therefore deprecated and will be removed from community.general 10.0.0 if nobody provides compelling reasons to still keep it (https://github.com/ansible-collections/community.general/issues/8184, https://github.com/ansible-collections/community.general/pull/8189). - -community.vmware -~~~~~~~~~~~~~~~~ - -- vmware_guest_tools_info - `vm_tools_install_status` will be removed from next major version (5.0.0) of the collection since the API call that provides this information has been deprecated by VMware. Use `vm_tools_running_status` / `vm_tools_version_status` instead (https://github.com/ansible-collections/community.vmware/issues/2033). - -Bugfixes --------- - -Ansible-core -~~~~~~~~~~~~ - -- Consolidated the list of internal static vars, centralized them as constant and completed from some missing entries. -- Fix check for missing _sub_plugin attribute in older connection plugins (https://github.com/ansible/ansible/pull/82954) -- Fixes permission for cache json file from 600 to 644 (https://github.com/ansible/ansible/issues/82683). -- Slight optimization to hostvars (instantiate template only once per host, vs per call to var). -- allow_duplicates - fix evaluating if the current role allows duplicates instead of using the initial value from the duplicate's cached role. -- ansible-config will now properly template defaults before dumping them. -- ansible-test ansible-doc sanity test - do not remove underscores from plugin names in collections before calling ``ansible-doc`` (https://github.com/ansible/ansible/pull/82574). -- async - Fix bug that stopped running async task in ``--check`` when ``check_mode: False`` was set as a task attribute - https://github.com/ansible/ansible/issues/82811 -- blockinfile - when ``create=true`` is used with a filename without path, the module crashed (https://github.com/ansible/ansible/pull/81638). -- dnf - fix an issue when cached RPMs were left in the cache directory even when the keepcache setting was unset (https://github.com/ansible/ansible/issues/81954) -- dnf5 - replace removed API calls -- facts - add a generic detection for VMware in product name. -- fetch - add error message when using ``dest`` with a trailing slash that becomes a local directory - https://github.com/ansible/ansible/issues/82878 -- find - do not fail on Permission errors (https://github.com/ansible/ansible/issues/82027). -- unarchive modules now uses zipinfo options without relying on implementation defaults, making it more compatible with all OS/distributions. -- winrm - Do not raise another exception during cleanup when a task is timed out - https://github.com/ansible/ansible/issues/81095 - -amazon.aws -~~~~~~~~~~ - -- 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). -- s3_object - Fix the issue when copying an object with overriding metadata. (https://github.com/ansible-collections/amazon.aws/issues/1991). - -cisco.aci -~~~~~~~~~ - -- Fix auto logout issue in aci connection plugin to keep connection active between tasks -- Fix idempotency for l3out configuration when l3protocol is used in aci_l3out -- Fix issues with new attributes in aci_interface_policy_leaf_policy_group module by adding conditions to include attributes in the payload only when they are specified by the user (#578) -- Fix query in aci_vmm_controller - -cisco.ise -~~~~~~~~~ - -- ansible.utils changes to `">=2.0.0,<5.0"` in galaxy.yml dependencies. - -cisco.mso -~~~~~~~~~ - -- Fix TypeError for iteration on NoneType in mso_schema_template -- Fixed the useg_subnet logic in mso_schema_template_anp_epg_useg_attribute - -community.aws -~~~~~~~~~~~~~ - -- ssm(connection) - fix bucket region logic when region is ``us-east-1`` (https://github.com/ansible-collections/community.aws/pull/1908). - -community.crypto -~~~~~~~~~~~~~~~~ - -- acme_certificate - respect the order of the CNAME and SAN identifiers that are passed on when creating an ACME order (https://github.com/ansible-collections/community.crypto/issues/723, https://github.com/ansible-collections/community.crypto/pull/725). - -community.dns -~~~~~~~~~~~~~ - -- Update Public Suffix List. -- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX (https://github.com/ansible-collections/community.dns/pull/197). - -community.docker -~~~~~~~~~~~~~~~~ - -- docker_compose_v2* - allow ``project_src`` to be a relative path, by converting it to an absolute path before using it (https://github.com/ansible-collections/community.docker/issues/827, https://github.com/ansible-collections/community.docker/pull/828). -- docker_compose_v2* modules - abort with a nice error message instead of crash when the Docker Compose CLI plugin version is ``dev`` (https://github.com/ansible-collections/community.docker/issues/825, https://github.com/ansible-collections/community.docker/pull/826). -- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX (https://github.com/ansible-collections/community.docker/pull/835). - -community.general -~~~~~~~~~~~~~~~~~ - -- aix_filesystem - fix ``_validate_vg`` not passing VG name to ``lsvg_cmd`` (https://github.com/ansible-collections/community.general/issues/8151). -- apt_rpm - when checking whether packages were installed after running ``apt-get -y install ``, only the last package name was checked (https://github.com/ansible-collections/community.general/pull/8263). -- bitwarden_secrets_manager lookup plugin - implements retry with exponential backoff to avoid lookup errors when Bitwardn's API rate limiting is encountered (https://github.com/ansible-collections/community.general/issues/8230, https://github.com/ansible-collections/community.general/pull/8238). -- from_ini filter plugin - disabling interpolation of ``ConfigParser`` to allow converting values with a ``%`` sign (https://github.com/ansible-collections/community.general/issues/8183, https://github.com/ansible-collections/community.general/pull/8185). -- gitlab_issue, gitlab_label, gitlab_milestone - avoid crash during version comparison when the python-gitlab Python module is not installed (https://github.com/ansible-collections/community.general/pull/8158). -- haproxy - fix an issue where HAProxy could get stuck in DRAIN mode when the backend was unreachable (https://github.com/ansible-collections/community.general/issues/8092). -- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX ((https://github.com/ansible-collections/community.general/issues/8212, https://github.com/ansible-collections/community.general/pull/8225). -- ipa - fix get version regex in IPA module_utils (https://github.com/ansible-collections/community.general/pull/8175). -- keycloak_client - add sorted ``defaultClientScopes`` and ``optionalClientScopes`` to normalizations (https://github.com/ansible-collections/community.general/pull/8223). -- keycloak_realm - add normalizations for ``enabledEventTypes`` and ``supportedLocales`` (https://github.com/ansible-collections/community.general/pull/8224). -- puppet - add option ``environment_lang`` to set the environment language encoding. Defaults to lang ``C``. It is recommended to set it to ``C.UTF-8`` or ``en_US.UTF-8`` depending on what is available on your system. (https://github.com/ansible-collections/community.general/issues/8000) -- riak - support ``riak admin`` sub-command in newer Riak KV versions beside the legacy ``riak-admin`` main command (https://github.com/ansible-collections/community.general/pull/8211). -- to_ini filter plugin - disabling interpolation of ``ConfigParser`` to allow converting values with a ``%`` sign (https://github.com/ansible-collections/community.general/issues/8183, https://github.com/ansible-collections/community.general/pull/8185). -- xml - make module work with lxml 5.1.1, which removed some internals that the module was relying on (https://github.com/ansible-collections/community.general/pull/8169). - -community.hrobot -~~~~~~~~~~~~~~~~ - -- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX (https://github.com/ansible-collections/community.hrobot/pull/102). - -community.vmware -~~~~~~~~~~~~~~~~ - -- Use `isinstance()` instead of `type()` for a typecheck (https://github.com/ansible-collections/community.vmware/pull/2011). -- vmware_guest - Fix a error while updating the VM by adding a new disk. While adding a disk to an existing VM, it leaves it in invalid state. (https://github.com/ansible-collections/community.vmware/pull/2044). -- vmware_guest - Fix a missing error message while setting a template parameter with inconsistency guest_os ID (https://github.com/ansible-collections/community.vmware/pull/2036). - -containers.podman -~~~~~~~~~~~~~~~~~ - -- Fix pod info for non-existant pods -- podman_container - Add check and fixed for v5 network diff -- podman_container - Fix pasta networking idempotency for v5 (#728) -- podman_container_exec - Remove unnecessary quotes in podman_container_exec module -- podman_image_info - Fix wrong return data type in podman_image_info -- podman_play - Fix kube play annotations -- podman_pod - Fix broken info of pods in Podman v5 -- podman_pod - Fix pod for Podman v5 -- podman_pod - Fix podman pod v5 broken info issue - -fortinet.fortios -~~~~~~~~~~~~~~~~ - -- Fix the issue that ssl-certificate cannot be set in `fortios_firewall_vip` and `fortios_firewall_vip6`. -- Github issue -- mantis issue - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_dns - fix issue with modifying DNS servers in REST. -- na_ontap_fpolicy_policy - fixed issue with idempotency in REST. -- na_ontap_quotas - fixed issue with idempotency in REST. -- na_ontap_security_config - added warning for missing `supported_cipher_suites` to maintain idempotency in REST. - -New Plugins ------------ - -Filter -~~~~~~ - -- community.dns.quote_txt - Quotes a string to use as a TXT record entry -- community.dns.unquote_txt - Unquotes a TXT record entry to a string - -New Modules ------------ - -community.aws -~~~~~~~~~~~~~ - -- community.aws.dynamodb_table_info - Returns information about a Dynamo DB table - -community.crypto -~~~~~~~~~~~~~~~~ - -- community.crypto.x509_certificate_convert - Convert X.509 certificates - -community.general -~~~~~~~~~~~~~~~~~ - -- community.general.keycloak_client_rolescope - Allows administration of Keycloak client roles scope to restrict the usage of certain roles to a other specific client applications. - -dellemc.powerflex -~~~~~~~~~~~~~~~~~ - -- dellemc.powerflex.resource_group - Manage resource group deployments on Dell PowerFlex - -Unchanged Collections ---------------------- - -- ansible.netcommon (still version 5.3.0) -- ansible.posix (still version 1.5.4) -- ansible.utils (still version 2.12.0) -- ansible.windows (still version 2.3.0) -- arista.eos (still version 6.2.2) -- awx.awx (still version 23.9.0) -- azure.azcollection (still version 1.19.0) -- check_point.mgmt (still version 5.2.3) -- chocolatey.chocolatey (still version 1.5.1) -- cisco.asa (still version 4.0.3) -- cisco.ios (still version 5.3.0) -- cisco.iosxr (still version 6.1.1) -- cisco.nxos (still version 5.3.0) -- cisco.ucs (still version 1.10.0) -- cloud.common (still version 2.1.4) -- cloudscale_ch.cloud (still version 2.3.1) -- community.azure (still version 2.0.0) -- community.ciscosmb (still version 1.0.7) -- community.digitalocean (still version 1.26.0) -- community.grafana (still version 1.8.0) -- community.hashi_vault (still version 6.2.0) -- community.libvirt (still version 1.3.0) -- community.mysql (still version 3.9.0) -- community.network (still version 5.0.2) -- community.okd (still version 2.3.0) -- community.postgresql (still version 3.4.0) -- community.proxysql (still version 1.5.1) -- community.sap (still version 2.0.0) -- community.sap_libs (still version 1.4.2) -- community.sops (still version 1.6.7) -- community.windows (still version 2.2.0) -- community.zabbix (still version 2.3.1) -- cyberark.conjur (still version 1.2.2) -- cyberark.pas (still version 1.0.25) -- dellemc.enterprise_sonic (still version 2.4.0) -- dellemc.openmanage (still version 8.7.0) -- dellemc.unity (still version 1.7.1) -- f5networks.f5_modules (still version 1.28.0) -- fortinet.fortimanager (still version 2.4.0) -- frr.frr (still version 2.0.2) -- gluster.gluster (still version 1.0.2) -- google.cloud (still version 1.3.0) -- grafana.grafana (still version 2.2.5) -- hetzner.hcloud (still version 2.5.0) -- hpe.nimble (still version 1.1.4) -- ibm.qradar (still version 2.1.0) -- ibm.spectrum_virtualize (still version 2.0.0) -- ibm.storage_virtualize (still version 2.3.1) -- infoblox.nios_modules (still version 1.6.1) -- inspur.ispim (still version 2.2.0) -- inspur.sm (still version 2.3.0) -- junipernetworks.junos (still version 5.3.1) -- kubernetes.core (still version 2.4.2) -- lowlydba.sqlserver (still version 2.3.2) -- microsoft.ad (still version 1.5.0) -- netapp.aws (still version 21.7.1) -- netapp.azure (still version 21.10.1) -- netapp.cloudmanager (still version 21.22.1) -- netapp.elementsw (still version 21.7.0) -- netapp.storagegrid (still version 21.12.0) -- netapp.um_info (still version 21.8.1) -- netapp_eseries.santricity (still version 1.4.0) -- netbox.netbox (still version 3.17.0) -- ngine_io.cloudstack (still version 2.3.0) -- ngine_io.exoscale (still version 1.1.0) -- openstack.cloud (still version 2.2.0) -- openvswitch.openvswitch (still version 2.1.1) -- ovirt.ovirt (still version 3.2.0) -- purestorage.flasharray (still version 1.27.0) -- purestorage.fusion (still version 1.6.1) -- sensu.sensu_go (still version 1.14.0) -- splunk.es (still version 2.1.2) -- t_systems_mms.icinga_director (still version 2.0.1) -- telekom_mms.icinga_director (still version 1.35.0) -- theforeman.foreman (still version 3.15.0) -- vmware.vmware_rest (still version 2.3.1) -- vultr.cloud (still version 1.12.1) -- vyos.vyos (still version 4.1.0) -- wti.remote (still version 1.0.5) - -v9.4.0 -====== - -.. contents:: - :local: - :depth: 2 - -Release Summary ---------------- - -Release Date: 2024-03-27 - -`Porting Guide `_ - -Ansible-core ------------- - -Ansible 9.4.0 contains ansible-core version 2.16.5. -This is a newer version than version 2.16.4 contained in the previous Ansible release. - -The changes are reported in the combined changelog below. - -Changed Collections -------------------- - -If not mentioned explicitly, the changes are reported in the combined changelog below. - -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| Collection | Ansible 9.3.0 | Ansible 9.4.0 | Notes | -+========================+===============+===============+==============================================================================================================================+ -| amazon.aws | 7.3.0 | 7.4.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| ansible.windows | 2.2.0 | 2.3.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| awx.awx | 23.8.1 | 23.9.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| check_point.mgmt | 5.2.2 | 5.2.3 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.dnac | 6.11.0 | 6.13.1 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ise | 2.7.0 | 2.8.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.dns | 2.8.1 | 2.8.3 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.docker | 3.8.0 | 3.8.1 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.general | 8.4.0 | 8.5.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.hashi_vault | 6.1.0 | 6.2.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.hrobot | 1.9.0 | 1.9.1 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.mongodb | 1.7.1 | 1.7.2 | There are no changes recorded in the changelog. | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.routeros | 2.13.0 | 2.14.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.windows | 2.1.0 | 2.2.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.powerflex | 2.1.0 | 2.2.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| ibm.storage_virtualize | 2.2.0 | 2.3.1 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| kubernetes.core | 2.4.1 | 2.4.2 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| lowlydba.sqlserver | 2.3.1 | 2.3.2 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| microsoft.ad | 1.4.1 | 1.5.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flasharray | 1.26.0 | 1.27.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flashblade | 1.15.0 | 1.16.0 | | -+------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ - -Minor Changes -------------- - -Ansible-core -~~~~~~~~~~~~ - -- ansible-test - Add a work-around for permission denied errors when using ``pytest >= 8`` on multi-user systems with an installed version of ``ansible-test``. - -amazon.aws -~~~~~~~~~~ - -- AnsibeAWSModule - added ``fail_json_aws_error()`` as a wrapper for ``fail_json()`` and ``fail_json_aws()`` when passed an ``AnsibleAWSError`` exception (https://github.com/ansible-collections/amazon.aws/pull/1997). -- iam_access_key - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_access_key_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_group - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_instance_profile - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_instance_profile_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_managed_policy - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_mfa_device_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_role - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_role_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_user - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). -- iam_user_info - refactored code to use ``AnsibleIAMError`` and ``IAMErrorHandler`` as well as moving shared code into module_utils.iam (https://github.com/ansible-collections/amazon.aws/pull/1998). - -ansible.windows -~~~~~~~~~~~~~~~ - -- win_uri - Max depth for json object conversion used to be 2. Can now send json objects with up to 20 levels of nesting - -cisco.dnac -~~~~~~~~~~ - -- Added attributes 'dnac_api_task_timeout' and 'dnac_task_poll_interval' in intent and workflow_manager modules. -- Addressed image un-tagging issues in inherited site settings. -- Changes the minimum supported version from Ansible v2.9.10 to v2.14.0 -- Corrected site creation issues in the site module when optional parameters are missing. -- Fixed management IP updates for devices on SNMP version v2. -- Introduced sample playbooks for the discovery module. -- Provided documentation for EWLC templates in Cisco Catalyst Center version 2.3.7.x. -- Resolved a 'NoneType' error in discovery module credentials. -- inventory_workflow_manager - Added attributes 'add_user_defined_field', 'update_interface_details', 'export_device_list' and 'admin_status' -- inventory_workflow_manager - Removed attributes 'provision_wireless_device', 'reprovision_wired_device' - -cisco.ise -~~~~~~~~~ - -- Changes the minimum supported version from Ansible v2.9.10 to v2.14.0 - -community.general -~~~~~~~~~~~~~~~~~ - -- bitwarden lookup plugin - allows to fetch all records of a given collection ID, by allowing to pass an empty value for ``search_value`` when ``collection_id`` is provided (https://github.com/ansible-collections/community.general/pull/8013). -- icinga2 inventory plugin - adds new parameter ``group_by_hostgroups`` in order to make grouping by Icinga2 hostgroups optional (https://github.com/ansible-collections/community.general/pull/7998). -- ini_file - support optional spaces between section names and their surrounding brackets (https://github.com/ansible-collections/community.general/pull/8075). -- java_cert - enable ``owner``, ``group``, ``mode``, and other generic file arguments (https://github.com/ansible-collections/community.general/pull/8116). -- ldap_attrs - module now supports diff mode, showing which attributes are changed within an operation (https://github.com/ansible-collections/community.general/pull/8073). -- lxd_container - uses ``/1.0/instances`` API endpoint, if available. Falls back to ``/1.0/containers`` or ``/1.0/virtual-machines``. Fixes issue when using Incus or LXD 5.19 due to migrating to ``/1.0/instances`` endpoint (https://github.com/ansible-collections/community.general/pull/7980). -- nmcli - allow setting ``MTU`` for ``bond-slave`` interface types (https://github.com/ansible-collections/community.general/pull/8118). -- proxmox - adds ``startup`` parameters to configure startup order, startup delay and shutdown delay (https://github.com/ansible-collections/community.general/pull/8038). -- revbitspss lookup plugin - removed a redundant unicode prefix. The prefix was not necessary for Python 3 and has been cleaned up to streamline the code (https://github.com/ansible-collections/community.general/pull/8087). - -community.hashi_vault -~~~~~~~~~~~~~~~~~~~~~ - -- cert auth - add option to set the ``cert_auth_public_key`` and ``cert_auth_private_key`` parameters using the variables ``ansible_hashi_vault_cert_auth_public_key`` and ``ansible_hashi_vault_cert_auth_private_key`` (https://github.com/ansible-collections/community.hashi_vault/issues/428). - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- api_info, api_modify - add read-only fields ``installed-version``, ``latest-version`` and ``status`` in ``system package update`` (https://github.com/ansible-collections/community.routeros/pull/263). -- api_info, api_modify - added support for ``interface wifi`` and its sub-paths (https://github.com/ansible-collections/community.routeros/pull/266). -- api_info, api_modify - remove default value for read-only ``running`` field in ``interface wireless`` (https://github.com/ansible-collections/community.routeros/pull/264). - -community.windows -~~~~~~~~~~~~~~~~~ - -- win_regmerge - Add content 'content' parameter for specifying registry file contents directly - -dellemc.powerflex -~~~~~~~~~~~~~~~~~ - -- The Info module is enhanced to retrieve lists related to fault sets, service templates, deployments, and managed devices. -- The SDS module has been enhanced to facilitate SDS creation within a fault set. - -ibm.storage_virtualize -~~~~~~~~~~~~~~~~~~~~~~ - -- ibm_sv_manage_snapshot - Added support to restore subset of volumes of a volumegroup from a snapshot -- ibm_svc_info - Added support to display information about partition, quorum, IO group, VG replication and enclosure, snmp server and ldap server -- ibm_svc_manage_volume - Added support to create clone or thinclone from snapshot -- ibm_svc_manage_volumgroup - Added support to create clone or thinkclone volumegroup from snapshot from a subset of volumes - -microsoft.ad -~~~~~~~~~~~~ - -- Added ``group/microsoft.ad.domain`` module defaults group for the ``computer``, ``group``, ``object_info``, ``object``, ``ou``, and ``user`` module. Users can use this defaults group to set common connection options for these modules such as the ``domain_server``, ``domain_username``, and ``domain_password`` options. -- Added support for Jinja2 templating in ldap inventory. - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purefa_arrayname - Convert to REST v2 -- purefa_eula - Only sign if not previously signed. From REST 2.30 name, title and company are no longer required -- purefa_info - Add support for controller uptime from Purity//FA 6.6.3 -- purefa_inventory - Convert to REST v2 -- purefa_ntp - Convert to REST v2 -- purefa_offload - Convert to REST v2 -- purefa_pgsnap - Module now requires minimum FlashArray Purity//FA 6.1.0 -- purefa_ra - Add ``present`` and ``absent`` as valid ``state`` options -- purefa_ra - Add connecting as valid status of RA to perform operations on -- purefa_ra - Convert to REST v2 -- purefa_syslog - ``name`` becomes a required parameter as module converts to full REST 2 support -- purefa_vnc - Convert to REST v2 - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purefb_ds - Add `force_bind_password` parameter to allow module to be idempotent. - -Deprecated Features -------------------- - -amazon.aws -~~~~~~~~~~ - -- iam_role_info - in a release after 2026-05-01 paths must begin and end with ``/`` (https://github.com/ansible-collections/amazon.aws/pull/1998). - -Security Fixes --------------- - -community.dns -~~~~~~~~~~~~~ - -- hosttech_dns_records and hetzner_dns_records inventory plugins - make sure all data received from the remote servers is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.dns/pull/189). - -community.docker -~~~~~~~~~~~~~~~~ - -- docker_containers, docker_machine, and docker_swarm inventory plugins - make sure all data received from the Docker daemon / Docker machine is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.docker/pull/815). - -community.general -~~~~~~~~~~~~~~~~~ - -- cobbler, gitlab_runners, icinga2, linode, lxd, nmap, online, opennebula, proxmox, scaleway, stackpath_compute, virtualbox, and xen_orchestra inventory plugin - make sure all data received from the remote servers is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.general/pull/8098). - -community.hrobot -~~~~~~~~~~~~~~~~ - -- robot inventory plugin - make sure all data received from the Hetzner robot service server is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.hrobot/pull/99). - -Bugfixes --------- - -Ansible-core -~~~~~~~~~~~~ - -- Fix an issue when setting a plugin name from an unsafe source resulted in ``ValueError: unmarshallable object`` (https://github.com/ansible/ansible/issues/82708) -- Harden python templates for respawn and ansiballz around str literal quoting -- ansible-test - The ``libexpat`` package is automatically upgraded during remote bootstrapping to maintain compatibility with newer Python packages. -- template - Fix error when templating an unsafe string which corresponds to an invalid type in Python (https://github.com/ansible/ansible/issues/82600). -- winrm - does not hang when attempting to get process output when stdin write failed - -amazon.aws -~~~~~~~~~~ - -- 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). -- module_utils/elbv2 - Fix issue when creating or modifying Load balancer rule type authenticate-oidc using ``ClientSecret`` parameter and ``UseExistingClientSecret=true`` (https://github.com/ansible-collections/amazon.aws/issues/1877). - -ansible.windows -~~~~~~~~~~~~~~~ - -- win_get_url - Fix Tls1.3 getting removed from the list of security protocols -- win_powershell - Remove unecessary using in code causing stray error records in output - https://github.com/ansible-collections/ansible.windows/issues/571 - -community.dns -~~~~~~~~~~~~~ - -- DNS record modules, inventory plugins - fix the TXT entry encoder to avoid splitting up escape sequences for quotes and backslashes over multiple TXT strings (https://github.com/ansible-collections/community.dns/issues/190, https://github.com/ansible-collections/community.dns/pull/191). -- Update Public Suffix List. - -community.docker -~~~~~~~~~~~~~~~~ - -- docker_compose_v2 - do not fail when non-fatal errors occur. This can happen when pulling an image fails, but then the image can be built for another service. Docker Compose emits an error in that case, but ``docker compose up`` still completes successfully (https://github.com/ansible-collections/community.docker/issues/807, https://github.com/ansible-collections/community.docker/pull/810, https://github.com/ansible-collections/community.docker/pull/811). -- docker_compose_v2* modules - correctly parse ``Warning`` events emitted by Docker Compose (https://github.com/ansible-collections/community.docker/issues/807, https://github.com/ansible-collections/community.docker/pull/811). -- docker_compose_v2* modules - parse ``logfmt`` warnings emitted by Docker Compose (https://github.com/ansible-collections/community.docker/issues/787, https://github.com/ansible-collections/community.docker/pull/811). -- docker_compose_v2_pull - fixing idempotence by checking actual pull progress events instead of service-level pull request when ``policy=always``. This stops the module from reporting ``changed=true`` if no actual change happened when pulling. In check mode, it has to assume that a change happens though (https://github.com/ansible-collections/community.docker/issues/813, https://github.com/ansible-collections/community.docker/pull/814). - -community.general -~~~~~~~~~~~~~~~~~ - -- aix_filesystem - fix issue with empty list items in crfs logic and option order (https://github.com/ansible-collections/community.general/pull/8052). -- consul_token - fix token creation without ``accessor_id`` (https://github.com/ansible-collections/community.general/pull/8091). -- homebrew - error returned from brew command was ignored and tried to parse empty JSON. Fix now checks for an error and raises it to give accurate error message to users (https://github.com/ansible-collections/community.general/issues/8047). -- ipa_hbacrule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880). -- ipa_sudorule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880). -- iptables_state - fix idempotency issues when restoring incomplete iptables dumps (https://github.com/ansible-collections/community.general/issues/8029). -- linode inventory plugin - add descriptive error message for linode inventory plugin (https://github.com/ansible-collections/community.general/pull/8133). -- pacemaker_cluster - actually implement check mode, which the module claims to support. This means that until now the module also did changes in check mode (https://github.com/ansible-collections/community.general/pull/8081). -- pam_limits - when the file does not exist, do not create it in check mode (https://github.com/ansible-collections/community.general/issues/8050, https://github.com/ansible-collections/community.general/pull/8057). -- proxmox_kvm - fixed status check getting from node-specific API endpoint (https://github.com/ansible-collections/community.general/issues/7817). - -community.windows -~~~~~~~~~~~~~~~~~ - -- win_format, win_partition - Add support for Windows failover cluster disks -- win_psmodule - Fix up error message with ``state=latest`` -- win_robocopy - Fix up ``cmd`` return value to include the executable ``robocopy`` - -ibm.storage_virtualize -~~~~~~~~~~~~~~~~~~~~~~ - -- ibm_svc_info - Command and release mapping to remove errors in gather_subset=all -- ibm_svc_info - Return error in listing entities that require object name - -kubernetes.core -~~~~~~~~~~~~~~~ - -- Resolve Collections util resource discovery fails when complex subresources present (https://github.com/ansible-collections/kubernetes.core/pull/676). - -lowlydba.sqlserver -~~~~~~~~~~~~~~~~~~ - -- Update documentation for agent_job_schedule to reflect proper input formatting. (https://github.com/lowlydba/lowlydba.sqlserver/pull/229) - -microsoft.ad -~~~~~~~~~~~~ - -- microsoft.ad.group - Support membership lookup of groups that are longer than 20 characters long -- microsoft.ad.membership - Add helpful hint when the failure was due to a missing/invalid ``domain_ou_path`` - https://github.com/ansible-collections/microsoft.ad/issues/88 - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purefa_certs - Allow certificates of over 3000 characters to be imported. -- purefa_info - Resolved issue with KeyError when LACP bonds are in use -- purefa_inventory - Fix issue with iSCSI-only FlashArrays -- purefa_pgsnap - Add support for restoring volumes connected to hosts in a host-based protection group and hosts in a hostgroup-based protection group. - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purefb_bucket - Changed logic to allow complex buckets to be created in a single call, rather than having to split into two tasks. -- purefb_lag - Enable LAG port configuration with multi-chassis -- purefb_timeout - Fixed arithmetic error that resulted in module incorrectly reporting changed when no change was required. - -New Plugins ------------ - -Filter -~~~~~~ - -- microsoft.ad.dn_escape - Escape an LDAP DistinguishedName value string. -- microsoft.ad.parse_dn - Parses an LDAP DistinguishedName string into an object. - -New Modules ------------ - -community.general -~~~~~~~~~~~~~~~~~ - -- community.general.usb_facts - Allows listing information about USB devices - -community.hashi_vault -~~~~~~~~~~~~~~~~~~~~~ - -- community.hashi_vault.vault_database_connection_configure - Configures the database engine -- community.hashi_vault.vault_database_connection_delete - Delete a Database Connection -- community.hashi_vault.vault_database_connection_read - Returns the configuration settings for a O(connection_name) -- community.hashi_vault.vault_database_connection_reset - Closes a O(connection_name) and its underlying plugin and restarts it with the configuration stored -- community.hashi_vault.vault_database_connections_list - Returns a list of available connections -- community.hashi_vault.vault_database_role_create - Creates or updates a (dynamic) role definition -- community.hashi_vault.vault_database_role_delete - Delete a role definition -- community.hashi_vault.vault_database_role_read - Queries a dynamic role definition -- community.hashi_vault.vault_database_roles_list - Returns a list of available (dynamic) roles -- community.hashi_vault.vault_database_rotate_root_credentials - Rotates the root credentials stored for the database connection. This user must have permissions to update its own password. -- community.hashi_vault.vault_database_static_role_create - Create or update a static role -- community.hashi_vault.vault_database_static_role_get_credentials - Returns the current credentials based on the named static role -- community.hashi_vault.vault_database_static_role_read - Queries a static role definition -- community.hashi_vault.vault_database_static_role_rotate_credentials - Trigger the credential rotation for a static role -- community.hashi_vault.vault_database_static_roles_list - Returns a list of available static roles - -dellemc.powerflex -~~~~~~~~~~~~~~~~~ - -- dellemc.powerflex.fault_set - Manage Fault Sets on Dell PowerFlex - -Unchanged Collections ---------------------- - -- ansible.netcommon (still version 5.3.0) -- ansible.posix (still version 1.5.4) -- ansible.utils (still version 2.12.0) -- arista.eos (still version 6.2.2) -- azure.azcollection (still version 1.19.0) -- chocolatey.chocolatey (still version 1.5.1) -- cisco.aci (still version 2.8.0) -- cisco.asa (still version 4.0.3) -- cisco.intersight (still version 2.0.7) -- cisco.ios (still version 5.3.0) -- cisco.iosxr (still version 6.1.1) -- cisco.meraki (still version 2.17.2) -- cisco.mso (still version 2.5.0) -- cisco.nxos (still version 5.3.0) -- cisco.ucs (still version 1.10.0) -- cloud.common (still version 2.1.4) -- cloudscale_ch.cloud (still version 2.3.1) -- community.aws (still version 7.1.0) -- community.azure (still version 2.0.0) -- community.ciscosmb (still version 1.0.7) -- community.crypto (still version 2.18.0) -- community.digitalocean (still version 1.26.0) -- community.grafana (still version 1.8.0) -- community.library_inventory_filtering_v1 (still version 1.0.0) -- community.libvirt (still version 1.3.0) -- community.mysql (still version 3.9.0) -- community.network (still version 5.0.2) -- community.okd (still version 2.3.0) -- community.postgresql (still version 3.4.0) -- community.proxysql (still version 1.5.1) -- community.rabbitmq (still version 1.2.3) -- community.sap (still version 2.0.0) -- community.sap_libs (still version 1.4.2) -- community.sops (still version 1.6.7) -- community.vmware (still version 4.2.0) -- community.zabbix (still version 2.3.1) -- containers.podman (still version 1.12.0) -- cyberark.conjur (still version 1.2.2) -- cyberark.pas (still version 1.0.25) -- dellemc.enterprise_sonic (still version 2.4.0) -- dellemc.openmanage (still version 8.7.0) -- dellemc.unity (still version 1.7.1) -- f5networks.f5_modules (still version 1.28.0) -- fortinet.fortimanager (still version 2.4.0) -- fortinet.fortios (still version 2.3.5) -- frr.frr (still version 2.0.2) -- gluster.gluster (still version 1.0.2) -- google.cloud (still version 1.3.0) -- grafana.grafana (still version 2.2.5) -- hetzner.hcloud (still version 2.5.0) -- hpe.nimble (still version 1.1.4) -- ibm.qradar (still version 2.1.0) -- ibm.spectrum_virtualize (still version 2.0.0) -- infinidat.infinibox (still version 1.4.3) -- infoblox.nios_modules (still version 1.6.1) -- inspur.ispim (still version 2.2.0) -- inspur.sm (still version 2.3.0) -- junipernetworks.junos (still version 5.3.1) -- netapp.aws (still version 21.7.1) -- netapp.azure (still version 21.10.1) -- netapp.cloudmanager (still version 21.22.1) -- netapp.elementsw (still version 21.7.0) -- netapp.ontap (still version 22.10.0) -- netapp.storagegrid (still version 21.12.0) -- netapp.um_info (still version 21.8.1) -- netapp_eseries.santricity (still version 1.4.0) -- netbox.netbox (still version 3.17.0) -- ngine_io.cloudstack (still version 2.3.0) -- ngine_io.exoscale (still version 1.1.0) -- openstack.cloud (still version 2.2.0) -- openvswitch.openvswitch (still version 2.1.1) -- ovirt.ovirt (still version 3.2.0) -- purestorage.fusion (still version 1.6.1) -- sensu.sensu_go (still version 1.14.0) -- splunk.es (still version 2.1.2) -- t_systems_mms.icinga_director (still version 2.0.1) -- telekom_mms.icinga_director (still version 1.35.0) -- theforeman.foreman (still version 3.15.0) -- vmware.vmware_rest (still version 2.3.1) -- vultr.cloud (still version 1.12.1) -- vyos.vyos (still version 4.1.0) -- wti.remote (still version 1.0.5) - -v9.3.0 -====== - -.. contents:: - :local: - :depth: 2 - -Release Summary ---------------- - -Release Date: 2024-02-27 - -`Porting Guide `_ - -Ansible-core ------------- - -Ansible 9.3.0 contains ansible-core version 2.16.4. -This is a newer version than version 2.16.3 contained in the previous Ansible release. - -The changes are reported in the combined changelog below. - -Changed Collections -------------------- - -If not mentioned explicitly, the changes are reported in the combined changelog below. - -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| Collection | Ansible 9.2.0 | Ansible 9.3.0 | Notes | -+=======================+===============+===============+==============================================================================================================================+ -| amazon.aws | 7.2.0 | 7.3.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| awx.awx | 23.6.0 | 23.8.1 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.dnac | 6.10.2 | 6.11.0 | The collection did not have a changelog in this version. | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.crypto | 2.17.1 | 2.18.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.dns | 2.8.0 | 2.8.1 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.docker | 3.7.0 | 3.8.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.general | 8.3.0 | 8.4.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.grafana | 1.7.0 | 1.8.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.mongodb | 1.6.3 | 1.7.1 | There are no changes recorded in the changelog. | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.mysql | 3.8.0 | 3.9.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.postgresql | 3.3.0 | 3.4.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.routeros | 2.12.0 | 2.13.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.vmware | 4.1.0 | 4.2.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| containers.podman | 1.11.0 | 1.12.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| f5networks.f5_modules | 1.27.1 | 1.28.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| fortinet.fortimanager | 2.3.1 | 2.4.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| fortinet.fortios | 2.3.4 | 2.3.5 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| grafana.grafana | 2.2.4 | 2.2.5 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| hetzner.hcloud | 2.4.1 | 2.5.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| infinidat.infinibox | 1.3.12 | 1.4.3 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| kubernetes.core | 2.4.0 | 2.4.1 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| lowlydba.sqlserver | 2.2.2 | 2.3.1 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| netapp.ontap | 22.9.0 | 22.10.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| netapp.storagegrid | 21.11.1 | 21.12.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| netbox.netbox | 3.16.0 | 3.17.0 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.fusion | 1.6.0 | 1.6.1 | | -+-----------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ - -Major Changes -------------- - -community.mysql -~~~~~~~~~~~~~~~ - -- Collection version 2.*.* is EOL, no more bugfixes will be backported. Please consider upgrading to the latest version. - -fortinet.fortios -~~~~~~~~~~~~~~~~ - -- Update all the boolean values to true/false in the documents and examples. -- Update the document of log_fact. -- Update the mismatched version message with version ranges. -- Update the required ansible version to 2.14. -- Update the supported version ranges instead of concrete version numbers to reduce the collection size. - -Minor Changes -------------- - -amazon.aws -~~~~~~~~~~ - -- backup_plan - Let user to set ``schedule_expression_timezone`` for backup plan rules when when using botocore >= 1.31.36 (https://github.com/ansible-collections/amazon.aws/issues/1952). -- iam_user - refactored error handling to use a decorator (https://github.com/ansible-collections/amazon.aws/pull/1951). -- lambda - added support for using ECR images for the function (https://github.com/ansible-collections/amazon.aws/pull/1939). -- module_utils.errors - added a basic error handler decorator (https://github.com/ansible-collections/amazon.aws/pull/1951). -- rds_cluster - Add support for ServerlessV2ScalingConfiguration to create and modify cluster operations (https://github.com/ansible-collections/amazon.aws/pull/1839). -- s3_bucket_info - add parameter ``bucket_versioning`` to return the versioning state of a bucket (https://github.com/ansible-collections/amazon.aws/pull/1919). -- s3_object_info - fix exception raised when listing objects from empty bucket (https://github.com/ansible-collections/amazon.aws/pull/1919). - -community.crypto -~~~~~~~~~~~~~~~~ - -- x509_crl - the new option ``serial_numbers`` allow to configure in which format serial numbers can be provided to ``revoked_certificates[].serial_number``. The default is as integers (``serial_numbers=integer``) for backwards compatibility; setting ``serial_numbers=hex-octets`` allows to specify colon-separated hex octet strings like ``00:11:22:FF`` (https://github.com/ansible-collections/community.crypto/issues/687, https://github.com/ansible-collections/community.crypto/pull/715). - -community.docker -~~~~~~~~~~~~~~~~ - -- docker_compose_v2 - allow to wait until containers are running/health when running ``docker compose up`` with the new ``wait`` option (https://github.com/ansible-collections/community.docker/issues/794, https://github.com/ansible-collections/community.docker/pull/796). -- docker_container - the ``pull_check_mode_behavior`` option now allows to control the module's behavior in check mode when ``pull=always`` (https://github.com/ansible-collections/community.docker/issues/792, https://github.com/ansible-collections/community.docker/pull/797). -- docker_container - the ``pull`` option now accepts the three values ``never``, ``missing_image`` (default), and ``never``, next to the previously valid values ``true`` (equivalent to ``always``) and ``false`` (equivalent to ``missing_image``). This allows the equivalent to ``--pull=never`` from the Docker command line (https://github.com/ansible-collections/community.docker/issues/783, https://github.com/ansible-collections/community.docker/pull/797). - -community.general -~~~~~~~~~~~~~~~~~ - -- bitwarden lookup plugin - add ``bw_session`` option, to pass session key instead of reading from env (https://github.com/ansible-collections/community.general/pull/7994). -- gitlab_deploy_key, gitlab_group_members, gitlab_group_variable, gitlab_hook, gitlab_instance_variable, gitlab_project_badge, gitlab_project_variable, gitlab_user - improve API pagination and compatibility with different versions of ``python-gitlab`` (https://github.com/ansible-collections/community.general/pull/7790). -- gitlab_hook - adds ``releases_events`` parameter for supporting Releases events triggers on GitLab hooks (https://github.com/ansible-collections/community.general/pull/7956). -- icinga2 inventory plugin - add Jinja2 templating support to ``url``, ``user``, and ``password`` paramenters (https://github.com/ansible-collections/community.general/issues/7074, https://github.com/ansible-collections/community.general/pull/7996). -- mssql_script - adds transactional (rollback/commit) support via optional boolean param ``transaction`` (https://github.com/ansible-collections/community.general/pull/7976). -- proxmox_kvm - add parameter ``update_unsafe`` to avoid limitations when updating dangerous values (https://github.com/ansible-collections/community.general/pull/7843). -- redfish_config - add command ``SetServiceIdentification`` to set service identification (https://github.com/ansible-collections/community.general/issues/7916). -- sudoers - add support for the ``NOEXEC`` tag in sudoers rules (https://github.com/ansible-collections/community.general/pull/7983). -- terraform - fix ``diff_mode`` in state ``absent`` and when terraform ``resource_changes`` does not exist (https://github.com/ansible-collections/community.general/pull/7963). - -community.grafana -~~~~~~~~~~~~~~~~~ - -- Manage `grafana_folder` for organizations -- Merged ansible role telekom-mms/ansible-role-grafana into ansible-collections/community.grafana -- added `community.grafana.notification_channel` to role -- grafana_dashboard - add check_mode support - -community.mysql -~~~~~~~~~~~~~~~ - -- mysql_user - add the ``password_expire`` and ``password_expire_interval`` arguments to implement the password expiration management for mysql user (https://github.com/ansible-collections/community.mysql/pull/598). -- mysql_user - add user attribute support via the ``attributes`` parameter and return value (https://github.com/ansible-collections/community.mysql/pull/604). - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- postgresql_db - add the ``icu_locale`` argument (https://github.com/ansible-collections/community.postgresql/issues/666). -- postgresql_db - add the ``locale_provider`` argument (https://github.com/ansible-collections/community.postgresql/issues/666). - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- api_info, api_modify - make path ``user group`` modifiable and add ``comment`` attribute (https://github.com/ansible-collections/community.routeros/issues/256, https://github.com/ansible-collections/community.routeros/pull/257). -- api_modify, api_info - add support for the ``ip vrf`` path in RouterOS 7 (https://github.com/ansible-collections/community.routeros/pull/259) - -community.vmware -~~~~~~~~~~~~~~~~ - -- Add standard function vmware_argument_spec() from module_utils for using default env fallback function. https://github.com/ansible-collections/community.vmware/issues/1977 -- vmware_first_class_disk_info - Add a module to gather informations about first class disks. (https://github.com/ansible-collections/community.vmware/pull/1996). (https://github.com/ansible-collections/community.vmware/issues/1988). -- vmware_host_facts - Add the possibility to get the related datacenter. (https://github.com/ansible-collections/community.vmware/pull/1994). -- vmware_vm_inventory - Add parameter `subproperties` (https://github.com/ansible-collections/community.vmware/pull/1972). -- vmware_vmkernel - Add the function to set the enable_backup_nfc setting (https://github.com/ansible-collections/community.vmware/pull/1978) -- vsphere_copy - Add parameter to tell vsphere_copy which diskformat is being uploaded (https://github.com/ansible-collections/community.vmware/pull/1995). - -containers.podman -~~~~~~~~~~~~~~~~~ - -- Add log_opt and annotaion options to podman_play module -- Add option to parse CreateCommand easily for diff calc -- Add support for setting underlying interface in podman_network -- Alias generate systemd options stop_timeout and time -- Fix CI rootfs for podman_container -- Fix broken conmon version in CI install -- Improve security_opt comparison between existing container -- podman_container - Add new arguments to podman status commands -- podman_container - Update env_file to accept a list of files instead of a single file -- podman_secret_info - Add secrets info module - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- Added deprecated warning to invalid argument name, please change the invalid argument name such as "var-name", "var name" to "var_name". -- Supported fortimanager 7.4.2, 21 new modules. - -grafana.grafana -~~~~~~~~~~~~~~~ - -- Add 'run_once' to download&unzip tasks by @v-zhuravlev in https://github.com/grafana/grafana-ansible-collection/pull/136 -- Adding `oauth_allow_insecure_email_lookup` to fix oauth user sync error by @hypery2k in https://github.com/grafana/grafana-ansible-collection/pull/132 -- Bump ansible-core from 2.15.4 to 2.15.8 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/137 -- Bump ansible-lint from 6.13.1 to 6.14.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/139 -- Bump ansible-lint from 6.14.3 to 6.22.2 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/142 -- Bump ansible-lint from 6.22.2 to 24.2.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/150 -- Bump jinja2 from 3.1.2 to 3.1.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/129 -- Bump pylint from 2.16.2 to 3.0.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/141 -- Bump yamllint from 1.29.0 to 1.33.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/140 -- Bump yamllint from 1.29.0 to 1.33.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/143 -- Bump yamllint from 1.33.0 to 1.34.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/151 -- Change handler to systemd by @v-zhuravlev in https://github.com/grafana/grafana-ansible-collection/pull/135 -- Fix links in grafana_agent/defaults/main.yaml by @PabloCastellano in https://github.com/grafana/grafana-ansible-collection/pull/134 -- Topic/grafana agent idempotency by @ohdearaugustin in https://github.com/grafana/grafana-ansible-collection/pull/147 - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- Replace deprecated `ansible.netcommon` ip utils with python `ipaddress` module. The `ansible.netcommon` collection is no longer required by the collections. -- firewall - Allow forcing the deletion of firewalls that are still in use. -- firewall - Do not silence 'firewall still in use' delete failures. -- firewall - Return resources the firewall is `applied_to`. -- firewall_info - Add new `firewall_info` module to gather firewalls info. -- firewall_resource - Add new `firewall_resource` module to manage firewalls resources. -- inventory - Add `hostvars_prefix` and hostvars_suffix` options to customize the inventory host variables keys. - -lowlydba.sqlserver -~~~~~~~~~~~~~~~~~~ - -- Add ability to prevent changing login's password, even if password supplied. -- Add new input strings to be compatible with dbops v0.9.x (https://github.com/lowlydba/lowlydba.sqlserver/pull/231) - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_cifs_server - new option `is_multichannel_enabled` added in REST, requires ONTAP 9.10 or later. -- na_ontap_export_policy_rule - added `actions` and `modify` in module output. -- na_ontap_file_security_permissions_acl - added `actions` and `modify` in module output. -- na_ontap_igroup_initiator - added `actions` in module output. -- na_ontap_lun_map - added `actions` in module output. -- na_ontap_lun_map_reporting_nodes - added `actions` in module output. -- na_ontap_name_mappings - added `actions` and `modify` in module output. -- na_ontap_node - added `modify` in module output. -- na_ontap_rest_info - added warning message if given subset doesn't support option `owning_resource`. -- na_ontap_storage_auto_giveback - added information on modified attributes in module output. -- na_ontap_vscan_scanner_pool - added REST support to Vscan Scanner Pools Configuration module, requires ONTAP 9.6 or later. - -netapp.storagegrid -~~~~~~~~~~~~~~~~~~ - -- na_sg_grid_account - New option ``allow_select_object_content`` for enabling use of the S3 SelectObjectContent API. -- na_sg_grid_account - New option ``description`` for setting additional identifying information for the tenant account. - -netbox.netbox -~~~~~~~~~~~~~ - -- CI - CI adjustments [#1154](https://github.com/netbox-community/ansible_modules/pull/1154) [#1155](https://github.com/netbox-community/ansible_modules/pull/1155) [#1157](https://github.com/netbox-community/ansible_modules/pull/1157) -- nb_lookup - Add new VPN endpoints for NetBox 3.7 support [#1162](https://github.com/netbox-community/ansible_modules/pull/1162) -- netbox_rack_role - Add description option [#1143](https://github.com/netbox-community/ansible_modules/pull/1143) -- netbox_virtual_disk - New module [#1153](https://github.com/netbox-community/ansible_modules/pull/1153) -- netbox_virtual_machine and netbox_device - Add option config_template [#1171](https://github.com/netbox-community/ansible_modules/pull/1171) - -purestorage.fusion -~~~~~~~~~~~~~~~~~~ - -- fusion_volume - Allow creating a new volume from already existing volume or volume snapshot - -Deprecated Features -------------------- - -- The ``inspur.sm`` collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11. See `the removal process for details on how this works `__ (https://forum.ansible.com/t/2854). -- The ``netapp.storagegrid`` collection is considered unmaintained and will be removed from Ansible 11 if no one starts maintaining it again before Ansible 11. See `the removal process for details on how this works `__ (https://forum.ansible.com/t/2811). -- The ``purestorage.fusion`` collection is officially unmaintained and has been archived. Therefore, it will be removed from Ansible 10 (https://forum.ansible.com/t/3712). - -community.crypto -~~~~~~~~~~~~~~~~ - -- openssl_csr_pipe, openssl_privatekey_pipe, x509_certificate_pipe - the current behavior of check mode is deprecated and will change in community.crypto 3.0.0. The current behavior is similar to the modules without ``_pipe``: if the object needs to be (re-)generated, only the ``changed`` status is set, but the object is not updated. From community.crypto 3.0.0 on, the modules will ignore check mode and always act as if check mode is not active. This behavior can already achieved now by adding ``check_mode: false`` to the task. If you think this breaks your use-case of this module, please `create an issue in the community.crypto repository `__ (https://github.com/ansible-collections/community.crypto/issues/712, https://github.com/ansible-collections/community.crypto/pull/714). - -Bugfixes --------- - -Ansible-core -~~~~~~~~~~~~ - -- Fix loading vars_plugins in roles (https://github.com/ansible/ansible/issues/82239). -- expect - fix argument spec error using timeout=null (https://github.com/ansible/ansible/issues/80982). -- include_vars - fix calculating ``depth`` relative to the root and ensure all files are included (https://github.com/ansible/ansible/issues/80987). -- templating - ensure syntax errors originating from a template being compiled into Python code object result in a failure (https://github.com/ansible/ansible/issues/82606) - -amazon.aws -~~~~~~~~~~ - -- backup_plan - Fix idempotency issue when using botocore >= 1.31.36 (https://github.com/ansible-collections/amazon.aws/issues/1952). -- 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). - -community.crypto -~~~~~~~~~~~~~~~~ - -- luks_device - fixed module a bug that prevented using ``remove_keyslot`` with the value ``0`` (https://github.com/ansible-collections/community.crypto/pull/710). -- luks_device - fixed module falsely outputting ``changed=false`` when trying to add a new slot with a key that is already present in another slot. The module now rejects adding keys that are already present in another slot (https://github.com/ansible-collections/community.crypto/pull/710). -- luks_device - fixed testing of LUKS passphrases in when specifying a keyslot for cryptsetup version 2.0.3. The output of this cryptsetup version slightly differs from later versions (https://github.com/ansible-collections/community.crypto/pull/710). - -community.dns -~~~~~~~~~~~~~ - -- Update Public Suffix List. - -community.docker -~~~~~~~~~~~~~~~~ - -- docker_compose_v2 - do not consider a ``Waiting`` event as an action/change (https://github.com/ansible-collections/community.docker/pull/804). -- docker_compose_v2 - do not treat service-level pull events as changes to avoid incorrect ``changed=true`` return value of ``pull=always`` (https://github.com/ansible-collections/community.docker/issues/802, https://github.com/ansible-collections/community.docker/pull/803). -- docker_compose_v2, docker_compose_v2_pull - fix parsing of pull messages for Docker Compose 2.20.0 (https://github.com/ansible-collections/community.docker/issues/785, https://github.com/ansible-collections/community.docker/pull/786). - -community.general -~~~~~~~~~~~~~~~~~ - -- cargo - fix idempotency issues when using a custom installation path for packages (using the ``--path`` parameter). The initial installation runs fine, but subsequent runs use the ``get_installed()`` function which did not check the given installation location, before running ``cargo install``. This resulted in a false ``changed`` state. Also the removal of packeges using ``state: absent`` failed, as the installation check did not use the given parameter (https://github.com/ansible-collections/community.general/pull/7970). -- gitlab_issue - fix behavior to search GitLab issue, using ``search`` keyword instead of ``title`` (https://github.com/ansible-collections/community.general/issues/7846). -- gitlab_runner - fix pagination when checking for existing runners (https://github.com/ansible-collections/community.general/pull/7790). -- keycloak_client - fixes issue when metadata is provided in desired state when task is in check mode (https://github.com/ansible-collections/community.general/issues/1226, https://github.com/ansible-collections/community.general/pull/7881). -- modprobe - listing modules files or modprobe files could trigger a FileNotFoundError if ``/etc/modprobe.d`` or ``/etc/modules-load.d`` did not exist. Relevant functions now return empty lists if the directories do not exist to avoid crashing the module (https://github.com/ansible-collections/community.general/issues/7717). -- onepassword lookup plugin - failed for fields that were in sections and had uppercase letters in the label/ID. Field lookups are now case insensitive in all cases (https://github.com/ansible-collections/community.general/pull/7919). -- pkgin - pkgin (pkgsrc package manager used by SmartOS) raises erratic exceptions and spurious ``changed=true`` (https://github.com/ansible-collections/community.general/pull/7971). -- redfish_info - allow for a GET operation invoked by ``GetUpdateStatus`` to allow for an empty response body for cases where a service returns 204 No Content (https://github.com/ansible-collections/community.general/issues/8003). -- redfish_info - correct uncaught exception when attempting to retrieve ``Chassis`` information (https://github.com/ansible-collections/community.general/pull/7952). - -community.grafana -~~~~~~~~~~~~~~~~~ - -- test: replace deprecated `TestCase.assertEquals` to support Python 3.12 - -community.mysql -~~~~~~~~~~~~~~~ - -- mysql_info - the ``slave_status`` filter was returning an empty list on MariaDB with multiple replication channels. It now returns all channels by running ``SHOW ALL SLAVES STATUS`` for MariaDB servers (https://github.com/ansible-collections/community.mysql/issues/603). - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- postgresql_privs - fix a failure when altering privileges with ``grant_option: true`` (https://github.com/ansible-collections/community.postgresql/issues/668). - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- facts - fix date not getting removed for idempotent config export (https://github.com/ansible-collections/community.routeros/pull/262). - -containers.podman -~~~~~~~~~~~~~~~~~ - -- Add idempotency for podman_secret module -- Catch exceptions when no JSON output in podman_image -- Fail if systemd generation failed and it's explicitly set -- Fix example name -- Fix idempotency for podman_network -- Fix idempotency when using 0.0.0.0 in ports -- Fix multi-image support for podman_save -- Fix volume inspection by name in podman_volume -- Recreate stopped containers if recreate flag is enabled - -f5networks.f5_modules -~~~~~~~~~~~~~~~~~~~~~ - -- bigip_gtm_monitor_bigip - fixed an issue where IP and port were not applied correctly when creating new monitor. -- bigip_gtm_monitor_firepass - fixed an issue where IP and port were not applied correctly when creating new monitor. -- bigip_gtm_monitor_http - fixed an issue where IP and port were not applied correctly when creating new monitor. -- bigip_gtm_monitor_https- fixed an issue where IP and port were not applied correctly when creating new monitor. -- bigip_gtm_monitor_tcp - fixed an issue where IP and port were not applied correctly when creating new monitor. -- bigip_gtm_monitor_tcp_half_open - fixed an issue where IP and port were not applied correctly when creating new monitor. -- bigip_gtm_topology_region - fixed an issue where if multiple states with spaces in values were defined, module would throw invalid command error -- bigip_gtm_topology_region - fixed an issue where states names that contained spaces caused the idempotency to break. -- bigip_ssl_key_cert - fixed an issue where the passphrase was not being properly send to the BIG-IP. - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- Changed revision to v_range to reduce the size of the code. -- Fixed the behavior of module fmgr_firewall_internetservicecustom. -- Fixed the behavior of some modules that contain the argument policyid. -- Improved example ansible playbooks. -- Improved the logic of fmgr_fact, fmgr_clone, fmgr_rename, fmgr_move. Usage remains unchanged. -- Reduced the size of module_arg_spec in each module. -- Removed most of the sanity test ignores. - -fortinet.fortios -~~~~~~~~~~~~~~~~ - -- Github issue - -lowlydba.sqlserver -~~~~~~~~~~~~~~~~~~ - -- Add ActiveStartDate to the compare properties so this item is marked accurately as changed. -- Fixed the formatting of the SPN by updating the backslash to a forward-slash for the $spn var (lowlydba.sqlserver.spn) - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_igroup_initiator - fixed issue with idempotency. - -netapp.storagegrid -~~~~~~~~~~~~~~~~~~ - -- Removed fetch limit in API request and implemented pagination. - -netbox.netbox -~~~~~~~~~~~~~ - -- netbox_vlan - Fix documentation of vlan_group [#1138](https://github.com/netbox-community/ansible_modules/pull/1138) - -New Plugins ------------ - -Callback -~~~~~~~~ - -- community.general.default_without_diff - The default ansible callback without diff output - -Filter -~~~~~~ - -- community.crypto.parse_serial - Convert a serial number as a colon-separated list of hex numbers to an integer -- community.crypto.to_serial - Convert an integer to a colon-separated list of hex numbers -- community.general.lists_difference - Difference of lists with a predictive order -- community.general.lists_intersect - Intersection of lists with a predictive order -- community.general.lists_symmetric_difference - Symmetric Difference of lists with a predictive order -- community.general.lists_union - Union of lists with a predictive order - -New Modules ------------ - -community.general -~~~~~~~~~~~~~~~~~ - -- community.general.gitlab_group_access_token - Manages GitLab group access tokens -- community.general.gitlab_project_access_token - Manages GitLab project access tokens - -containers.podman -~~~~~~~~~~~~~~~~~ - -- containers.podman.podman_secret_info - Secrets info module - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- fortinet.fortimanager.fmgr_diameterfilter_profile - Configure Diameter filter profiles. -- fortinet.fortimanager.fmgr_firewall_accessproxysshclientcert - Configure Access Proxy SSH client certificate. -- fortinet.fortimanager.fmgr_firewall_accessproxysshclientcert_certextension - Configure certificate extension for user certificate. -- fortinet.fortimanager.fmgr_firewall_vip6_quic - QUIC setting. -- fortinet.fortimanager.fmgr_firewall_vip_gslbpublicips - Publicly accessible IP addresses for the FortiGSLB service. -- fortinet.fortimanager.fmgr_sctpfilter_profile - Configure SCTP filter profiles. -- fortinet.fortimanager.fmgr_sctpfilter_profile_ppidfilters - PPID filters list. -- fortinet.fortimanager.fmgr_switchcontroller_managedswitch_vlan - Configure VLAN assignment priority. -- fortinet.fortimanager.fmgr_system_admin_profile_writepasswdprofiles - Profile list. -- fortinet.fortimanager.fmgr_system_admin_profile_writepasswduserlist - User list. -- fortinet.fortimanager.fmgr_system_npu_nputcam - Configure NPU TCAM policies. -- fortinet.fortimanager.fmgr_system_npu_nputcam_data - Data fields of TCAM. -- fortinet.fortimanager.fmgr_system_npu_nputcam_mask - Mask fields of TCAM. -- fortinet.fortimanager.fmgr_system_npu_nputcam_miract - Mirror action of TCAM. -- fortinet.fortimanager.fmgr_system_npu_nputcam_priact - Priority action of TCAM. -- fortinet.fortimanager.fmgr_system_npu_nputcam_sact - Source action of TCAM. -- fortinet.fortimanager.fmgr_system_npu_nputcam_tact - Target action of TCAM. -- fortinet.fortimanager.fmgr_videofilter_keyword - Configure video filter keywords. -- fortinet.fortimanager.fmgr_videofilter_keyword_word - List of keywords. -- fortinet.fortimanager.fmgr_videofilter_profile_filters - YouTube filter entries. -- fortinet.fortimanager.fmgr_videofilter_youtubekey - Configure YouTube API keys. - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- hetzner.hcloud.firewall_resource - Manage Resources a Hetzner Cloud Firewall is applied to. - -netbox.netbox -~~~~~~~~~~~~~ - -- netbox.netbox.netbox_virtual_disk - Create, updates, or removes a disk from a Virtual Machine - -Unchanged Collections ---------------------- - -- ansible.netcommon (still version 5.3.0) -- ansible.posix (still version 1.5.4) -- ansible.utils (still version 2.12.0) -- ansible.windows (still version 2.2.0) -- arista.eos (still version 6.2.2) -- azure.azcollection (still version 1.19.0) -- check_point.mgmt (still version 5.2.2) -- chocolatey.chocolatey (still version 1.5.1) -- cisco.aci (still version 2.8.0) -- cisco.asa (still version 4.0.3) -- cisco.intersight (still version 2.0.7) -- cisco.ios (still version 5.3.0) -- cisco.iosxr (still version 6.1.1) -- cisco.ise (still version 2.7.0) -- cisco.meraki (still version 2.17.2) -- cisco.mso (still version 2.5.0) -- cisco.nxos (still version 5.3.0) -- cisco.ucs (still version 1.10.0) -- cloud.common (still version 2.1.4) -- cloudscale_ch.cloud (still version 2.3.1) -- community.aws (still version 7.1.0) -- community.azure (still version 2.0.0) -- community.ciscosmb (still version 1.0.7) -- community.digitalocean (still version 1.26.0) -- community.hashi_vault (still version 6.1.0) -- community.hrobot (still version 1.9.0) -- community.library_inventory_filtering_v1 (still version 1.0.0) -- community.libvirt (still version 1.3.0) -- community.network (still version 5.0.2) -- community.okd (still version 2.3.0) -- community.proxysql (still version 1.5.1) -- community.rabbitmq (still version 1.2.3) -- community.sap (still version 2.0.0) -- community.sap_libs (still version 1.4.2) -- community.sops (still version 1.6.7) -- community.windows (still version 2.1.0) -- community.zabbix (still version 2.3.1) -- cyberark.conjur (still version 1.2.2) -- cyberark.pas (still version 1.0.25) -- dellemc.enterprise_sonic (still version 2.4.0) -- dellemc.openmanage (still version 8.7.0) -- dellemc.powerflex (still version 2.1.0) -- dellemc.unity (still version 1.7.1) -- frr.frr (still version 2.0.2) -- gluster.gluster (still version 1.0.2) -- google.cloud (still version 1.3.0) -- hpe.nimble (still version 1.1.4) -- ibm.qradar (still version 2.1.0) -- ibm.spectrum_virtualize (still version 2.0.0) -- ibm.storage_virtualize (still version 2.2.0) -- infoblox.nios_modules (still version 1.6.1) -- inspur.ispim (still version 2.2.0) -- inspur.sm (still version 2.3.0) -- junipernetworks.junos (still version 5.3.1) -- microsoft.ad (still version 1.4.1) -- netapp.aws (still version 21.7.1) -- netapp.azure (still version 21.10.1) -- netapp.cloudmanager (still version 21.22.1) -- netapp.elementsw (still version 21.7.0) -- netapp.um_info (still version 21.8.1) -- netapp_eseries.santricity (still version 1.4.0) -- ngine_io.cloudstack (still version 2.3.0) -- ngine_io.exoscale (still version 1.1.0) -- openstack.cloud (still version 2.2.0) -- openvswitch.openvswitch (still version 2.1.1) -- ovirt.ovirt (still version 3.2.0) -- purestorage.flasharray (still version 1.26.0) -- purestorage.flashblade (still version 1.15.0) -- sensu.sensu_go (still version 1.14.0) -- splunk.es (still version 2.1.2) -- t_systems_mms.icinga_director (still version 2.0.1) -- telekom_mms.icinga_director (still version 1.35.0) -- theforeman.foreman (still version 3.15.0) -- vmware.vmware_rest (still version 2.3.1) -- vultr.cloud (still version 1.12.1) -- vyos.vyos (still version 4.1.0) -- wti.remote (still version 1.0.5) - -v9.2.0 -====== - -.. contents:: - :local: - :depth: 2 - -Release Summary ---------------- - -Release Date: 2024-01-30 - -`Porting Guide `_ - -Added Collections ------------------ - -- community.library_inventory_filtering_v1 (version 1.0.0) - -Ansible-core ------------- - -Ansible 9.2.0 contains ansible-core version 2.16.3. -This is a newer version than version 2.16.1 contained in the previous Ansible release. - -The changes are reported in the combined changelog below. - -Changed Collections -------------------- - -If not mentioned explicitly, the changes are reported in the combined changelog below. - -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| Collection | Ansible 9.1.0 | Ansible 9.2.0 | Notes | -+==========================================+===============+===============+==============================================================================================================================+ -| amazon.aws | 7.0.0 | 7.2.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| awx.awx | 23.5.0 | 23.6.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| check_point.mgmt | 5.1.1 | 5.2.2 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.dnac | 6.8.1 | 6.10.2 | The collection did not have a changelog in this version. | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.intersight | 2.0.3 | 2.0.7 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ise | 2.6.2 | 2.7.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.meraki | 2.16.16 | 2.17.2 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.aws | 7.0.0 | 7.1.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.crypto | 2.16.1 | 2.17.1 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.digitalocean | 1.24.0 | 1.26.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.dns | 2.6.4 | 2.8.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.docker | 3.4.11 | 3.7.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.general | 8.1.0 | 8.3.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.grafana | 1.6.1 | 1.7.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.hashi_vault | 6.0.0 | 6.1.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.hrobot | 1.8.2 | 1.9.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.library_inventory_filtering_v1 | | 1.0.0 | The collection was added to Ansible | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.postgresql | 3.2.0 | 3.3.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.routeros | 2.11.0 | 2.12.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.sap_libs | 1.4.1 | 1.4.2 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.vmware | 4.0.1 | 4.1.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.zabbix | 2.2.0 | 2.3.1 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cyberark.pas | 1.0.23 | 1.0.25 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.enterprise_sonic | 2.2.0 | 2.4.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.openmanage | 8.5.0 | 8.7.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| fortinet.fortimanager | 2.3.0 | 2.3.1 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| grafana.grafana | 2.2.3 | 2.2.4 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| ibm.storage_virtualize | 2.1.0 | 2.2.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| infoblox.nios_modules | 1.5.0 | 1.6.1 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| netapp.ontap | 22.8.3 | 22.9.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| netbox.netbox | 3.15.0 | 3.16.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flasharray | 1.24.0 | 1.26.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flashblade | 1.14.0 | 1.15.0 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| vultr.cloud | 1.10.1 | 1.12.1 | | -+------------------------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ - -Major Changes -------------- - -community.docker -~~~~~~~~~~~~~~~~ - -- The ``community.docker`` collection now depends on the ``community.library_inventory_filtering_v1`` collection. This utility collection provides host filtering functionality for inventory plugins. If you use the Ansible community package, both collections are included and you do not have to do anything special. If you install the collection with ``ansible-galaxy collection install``, it will be installed automatically. If you install the collection by copying the files of the collection to a place where ansible-core can find it, for example by cloning the git repository, you need to make sure that you also have to install the dependency if you are using the inventory plugins (https://github.com/ansible-collections/community.docker/pull/698). - -community.hashi_vault -~~~~~~~~~~~~~~~~~~~~~ - -- requirements - the ``requests`` package which is required by ``hvac`` now has a more restrictive range for this collection in certain use cases due to breaking security changes in ``ansible-core`` that were backported (https://github.com/ansible-collections/community.hashi_vault/pull/416). - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- All OME modules are enhanced to support the environment variables `OME_USERNAME` and `OME_PASSWORD` as fallback for credentials. -- All iDRAC and Redfish modules are enhanced to support the environment variables `IDRAC_USERNAME` and `IDRAC_PASSWORD` as fallback for credentials. -- idrac_certificates - The module is enhanced to support the import and export of `CUSTOMCERTIFICATE`. -- idrac_gather_facts - This role is enhanced to support secure boot. -- idrac_license - The module is introduced to configure iDRAC licenses. - -infoblox.nios_modules -~~~~~~~~~~~~~~~~~~~~~ - -- Upgrade Ansible version support from 2.13 to 2.16. -- Upgrade Python version support from 3.8 to 3.10. - -Minor Changes -------------- - -amazon.aws -~~~~~~~~~~ - -- autoscaling_group - minor PEP8 whitespace sanity fixes (https://github.com/ansible-collections/amazon.aws/pull/1846). -- ec2_ami_info - simplify parameters to ``get_image_attribute`` to only pass ID of image (https://github.com/ansible-collections/amazon.aws/pull/1846). -- ec2_eip - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) -- ec2_instance - Add support for modifying metadata options of an existing instance (https://github.com/ansible-collections/amazon.aws/pull/1918). -- ec2_instance - add support for AdditionalInfo option when creating an instance (https://github.com/ansible-collections/amazon.aws/pull/1828). -- ec2_security_group - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/pull/1844) -- ec2_vpc_igw - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) -- ec2_vpc_route_table - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) -- ec2_vpc_subnet - the default value for ``tags`` has been changed from ``{}`` to ``None``, to remove tags from a subnet an empty map must be explicitly passed to the module (https://github.com/ansible-collections/amazon.aws/pull/1876). -- ec2_vpc_subnet - use ``ResourceTags`` to set initial tags upon creation (https://github.com/ansible-collections/amazon.aws/issues/1843) -- 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). -- iam_group - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_group - ``group_name`` has been added as an alias to ``name`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_group - add support for setting group path (https://github.com/ansible-collections/amazon.aws/pull/1892). -- iam_group - adds attached_policies return value (https://github.com/ansible-collections/amazon.aws/pull/1892). -- iam_group - code refactored to avoid single long function (https://github.com/ansible-collections/amazon.aws/pull/1892). -- iam_instance_profile - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_instance_profile - attempting to change the ``path`` for an existing profile will now generate a warning, previously this was silently ignored (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_instance_profile - the ``prefix`` parameter has been renamed ``path`` for consistency with other IAM modules, ``prefix`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_instance_profile - the default value for ``path`` has been removed. New instances will still be created with a default path of ``/``. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_managed_policy - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_managed_policy - ``description`` attempting to update the description now results in a warning, previously it was simply ignored (https://github.com/ansible-collections/amazon.aws/pull/1936). -- iam_managed_policy - ``policy`` is no longer a required parameter (https://github.com/ansible-collections/amazon.aws/pull/1936). -- iam_managed_policy - added support for tagging managed policies (https://github.com/ansible-collections/amazon.aws/pull/1936). -- iam_managed_policy - more consistently perform retries on rate limiting errors (https://github.com/ansible-collections/amazon.aws/pull/1936). -- iam_managed_policy - support for setting ``path`` (https://github.com/ansible-collections/amazon.aws/pull/1936). -- iam_managed_policy - the ``policy_description`` parameter has been renamed ``description`` for consistency with other IAM modules, ``policy_description`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_managed_policy - the ``policy_name`` parameter has been renamed ``name`` for consistency with other IAM modules, ``policy_name`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_role - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_role - ``prefix`` and ``path_prefix`` have been added as aliases to ``path`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_role - ``role_name`` has been added as an alias to ``name`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_role - attempting to change the ``path`` for an existing profile will now generate a warning, previously this was silently ignored (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_role - the default value for ``path`` has been removed. New roles will still be created with a default path of ``/``. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_role_info - ``path`` and ``prefix`` have been added as aliases to ``path_prefix`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_user - Basic testing of ``name`` and ``path`` has been added to improve error messages (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_user - ``user_name`` has been added as an alias to ``name`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_user - add ``boundary`` parameter to support managing boundary policy on users (https://github.com/ansible-collections/amazon.aws/pull/1912). -- iam_user - add ``path`` parameter to support managing user path (https://github.com/ansible-collections/amazon.aws/pull/1912). -- iam_user - added ``attached_policies`` to return value (https://github.com/ansible-collections/amazon.aws/pull/1912). -- iam_user - refactored code to reduce complexity (https://github.com/ansible-collections/amazon.aws/pull/1912). -- iam_user_info - ``prefix`` has been added as an alias to ``path_prefix`` for consistency with other IAM modules (https://github.com/ansible-collections/amazon.aws/pull/1933). -- iam_user_info - the ``path`` parameter has been renamed ``path_prefix`` for consistency with other IAM modules, ``path`` remains as an alias. No change to playbooks is required (https://github.com/ansible-collections/amazon.aws/pull/1933). -- rds_instance_snapshot - minor PEP8 whitespace sanity fixes (https://github.com/ansible-collections/amazon.aws/pull/1846). - -check_point.mgmt -~~~~~~~~~~~~~~~~ - -- New resource modules for R81.20 JHF Take 43 -- meta/runtime.yml - update minimum Ansible version required to 2.14.0. - -cisco.ise -~~~~~~~~~ - -- cisco.ise collection now supports ansible.utils v3 - -cisco.meraki -~~~~~~~~~~~~ - -- Adding support to ansible.utils ">=2.0.0, <4.00". - -community.aws -~~~~~~~~~~~~~ - -- aws_ssm - Updated the documentation to explicitly state that an S3 bucket is required, the behavior of the files in that bucket, and requirements around that. (https://github.com/ansible-collections/community.aws/issues/1775). -- cloudfront_distribution - added support for ``cache_policy_id`` and ``origin_request_policy_id`` for behaviors (https://github.com/ansible-collections/community.aws/pull/1589) -- mq_broker - add support to wait for broker state via ``wait`` and ``wait_timeout`` parameter values (https://github.com/ansible-collections/community.aws/pull/1879). - -community.crypto -~~~~~~~~~~~~~~~~ - -- luks_device - add allow discards option (https://github.com/ansible-collections/community.crypto/pull/693). - -community.digitalocean -~~~~~~~~~~~~~~~~~~~~~~ - -- digital_ocean_kubernetes - add project_name parameter (https://github.com/ansible-collections/community.digitalocean/issues/264). -- fix sanity tests (https://github.com/ansible-collections/community.digitalocean/issues/323). - -community.dns -~~~~~~~~~~~~~ - -- hetzner_dns_records and hosttech_dns_records inventory plugins - the ``filters`` option has been renamed to ``simple_filters``. The old name still works until community.hrobot 2.0.0. Then it will change to allow more complex filtering with the ``community.library_inventory_filtering_v1`` collection's functionality (https://github.com/ansible-collections/community.dns/pull/181). -- nameserver_info and nameserver_record_info - add ``server`` parameter to specify custom DNS servers (https://github.com/ansible-collections/community.dns/pull/168, https://github.com/ansible-collections/community.dns/pull/178). -- wait_for_txt - add ``server`` parameter to specify custom DNS servers (https://github.com/ansible-collections/community.dns/pull/178). - -community.docker -~~~~~~~~~~~~~~~~ - -- The ``ca_cert`` option available to almost all modules and plugins has been renamed to ``ca_path``. The name ``ca_path`` is also used for similar options in ansible-core and other collections. The old name has been added as an alias and can still be used (https://github.com/ansible-collections/community.docker/pull/744). -- The ``docker_stack*`` modules now use the common CLI-based module code added for the ``docker_image_build`` and ``docker_compose_v2`` modules. This means that the modules now have various more configuration options with respect to talking to the Docker Daemon, and now also are part of the ``community.docker.docker`` and ``docker`` module default groups (https://github.com/ansible-collections/community.docker/pull/745). -- docker_compose_v2 - add ``scale`` option to allow to explicitly scale services (https://github.com/ansible-collections/community.docker/pull/776). -- docker_compose_v2, docker_compose_v2_pull - support ``files`` parameter to specify multiple Compose files (https://github.com/ansible-collections/community.docker/issues/772, https://github.com/ansible-collections/community.docker/pull/775). -- docker_container - add ``networks[].mac_address`` option for Docker API 1.44+. Note that Docker API 1.44 no longer uses the global ``mac_address`` option, this new option is the only way to set the MAC address for a container (https://github.com/ansible-collections/community.docker/pull/763). -- docker_container - implement better ``platform`` string comparisons to improve idempotency (https://github.com/ansible-collections/community.docker/issues/654, https://github.com/ansible-collections/community.docker/pull/705). -- docker_container - internal refactorings which allow comparisons to use more information like details of the current image or the Docker host config (https://github.com/ansible-collections/community.docker/pull/713). -- docker_image - allow to specify labels and ``/dev/shm`` size when building images (https://github.com/ansible-collections/community.docker/issues/726, https://github.com/ansible-collections/community.docker/pull/727). -- docker_image - allow to specify memory size and swap memory size in other units than bytes (https://github.com/ansible-collections/community.docker/pull/727). -- inventory plugins - add ``filter`` option which allows to include and exclude hosts based on Jinja2 conditions (https://github.com/ansible-collections/community.docker/pull/698, https://github.com/ansible-collections/community.docker/issues/610). - -community.general -~~~~~~~~~~~~~~~~~ - -- consul_auth_method, consul_binding_rule, consul_policy, consul_role, consul_session, consul_token - added action group ``community.general.consul`` (https://github.com/ansible-collections/community.general/pull/7897). -- consul_policy - added support for diff and check mode (https://github.com/ansible-collections/community.general/pull/7878). -- consul_policy, consul_role, consul_session - removed dependency on ``requests`` and factored out common parts (https://github.com/ansible-collections/community.general/pull/7826, https://github.com/ansible-collections/community.general/pull/7878). -- consul_role - ``node_identities`` now expects a ``node_name`` option to match the Consul API, the old ``name`` is still supported as alias (https://github.com/ansible-collections/community.general/pull/7878). -- consul_role - ``service_identities`` now expects a ``service_name`` option to match the Consul API, the old ``name`` is still supported as alias (https://github.com/ansible-collections/community.general/pull/7878). -- consul_role - added support for diff mode (https://github.com/ansible-collections/community.general/pull/7878). -- consul_role - added support for templated policies (https://github.com/ansible-collections/community.general/pull/7878). -- ipa_dnsrecord - adds ability to manage NS record types (https://github.com/ansible-collections/community.general/pull/7737). -- ipa_pwpolicy - refactor module and exchange a sequence ``if`` statements with a ``for`` loop (https://github.com/ansible-collections/community.general/pull/7723). -- ipa_pwpolicy - update module to support ``maxrepeat``, ``maxsequence``, ``dictcheck``, ``usercheck``, ``gracelimit`` parameters in FreeIPA password policies (https://github.com/ansible-collections/community.general/pull/7723). -- keycloak_realm_key - the ``config.algorithm`` option now supports 8 additional key algorithms (https://github.com/ansible-collections/community.general/pull/7698). -- keycloak_realm_key - the ``config.certificate`` option value is no longer defined with ``no_log=True`` (https://github.com/ansible-collections/community.general/pull/7698). -- keycloak_realm_key - the ``provider_id`` option now supports RSA encryption key usage (value ``rsa-enc``) (https://github.com/ansible-collections/community.general/pull/7698). -- keycloak_user_federation - allow custom user storage providers to be set through ``provider_id`` (https://github.com/ansible-collections/community.general/pull/7789). -- mail - add ``Message-ID`` header; which is required by some mail servers (https://github.com/ansible-collections/community.general/pull/7740). -- mail module, mail callback plugin - allow to configure the domain name of the Message-ID header with a new ``message_id_domain`` option (https://github.com/ansible-collections/community.general/pull/7765). -- redfish_info - add command ``GetServiceIdentification`` to get service identification (https://github.com/ansible-collections/community.general/issues/7882). -- ssh_config - new feature to set ``AddKeysToAgent`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7703). -- ssh_config - new feature to set ``IdentitiesOnly`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7704). -- terraform - add support for ``diff_mode`` for terraform resource_changes (https://github.com/ansible-collections/community.general/pull/7896). -- xcc_redfish_command - added support for raw POSTs (``command=PostResource`` in ``category=Raw``) without a specific action info (https://github.com/ansible-collections/community.general/pull/7746). - -community.grafana -~~~~~~~~~~~~~~~~~ - -- Add Quickwit search engine datasource (https://quickwit.io). -- Add parameter `org_name` to `grafana_dashboard` -- Add parameter `org_name` to `grafana_datasource` -- Add parameter `org_name` to `grafana_organization_user` -- Add support for Grafana Tempo datasource type (https://grafana.com/docs/grafana/latest/datasources/tempo/) -- default to true/false in docs and code - -community.hrobot -~~~~~~~~~~~~~~~~ - -- robot inventory plugin - the ``filters`` option has been renamed to ``simple_filters``. The old name still works until community.hrobot 2.0.0. Then it will change to allow more complex filtering with the ``community.library_inventory_filtering_v1`` collection's functionality (https://github.com/ansible-collections/community.hrobot/pull/94). - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- postgresql_db - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/614). -- postgresql_ext - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). -- postgresql_publication - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). -- postgresql_schema - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). -- postgresql_subscription - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). -- postgresql_tablespace - add the ``comment`` argument (https://github.com/ansible-collections/community.postgresql/issues/354). - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- api_info, api_modify - add ``interface ovpn-client`` path (https://github.com/ansible-collections/community.routeros/issues/242, https://github.com/ansible-collections/community.routeros/pull/244). -- api_info, api_modify - add ``radius`` path (https://github.com/ansible-collections/community.routeros/issues/241, https://github.com/ansible-collections/community.routeros/pull/245). -- api_info, api_modify - add ``routing rule`` path (https://github.com/ansible-collections/community.routeros/issues/162, https://github.com/ansible-collections/community.routeros/pull/246). -- api_info, api_modify - add missing path ``routing bgp template`` (https://github.com/ansible-collections/community.routeros/pull/243). -- api_info, api_modify - add support for the ``tx-power`` attribute in ``interface wireless`` (https://github.com/ansible-collections/community.routeros/pull/239). -- api_info, api_modify - removed ``host`` primary key in ``tool netwatch`` path (https://github.com/ansible-collections/community.routeros/pull/248). -- api_modify, api_info - added support for ``interface wifiwave2`` (https://github.com/ansible-collections/community.routeros/pull/226). - -community.vmware -~~~~~~~~~~~~~~~~ - -- vmware_guest - Add IPv6 support for VM network interfaces (https://github.com/ansible-collections/community.vmware/pull/1937). -- vmware_guest_sendkey - Add Windows key (https://github.com/ansible-collections/community.vmware/issues/1959). -- vmware_guest_tools_upgrade - Add parameter `installer_options` to pass command line options to the installer to modify the installation procedure for tools (https://github.com/ansible-collections/community.vmware/pull/1059). - -community.zabbix -~~~~~~~~~~~~~~~~ - -- api_requests - Handled error from depricated CertificateError class -- multiple roles - Removed unneeded Apt Clean commands. -- proxy role - Updated MariaDB version for Centos 7 to 10.11 -- zabbix web - Allowed the independent configuration of php-fpm without creating vhost. -- zabbix_host_info - added ability to get all the hosts configured in Zabbix -- zabbix_proxy role - Add variable zabbix_proxy_dbpassword_hash_method to control whether you want postgresql user password to be hashed with md5 or want to use db default. When zabbix_proxy_dbpassword_hash_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram-sha-256 hashing method. -- zabbix_server role - Add variable zabbix_server_dbpassword_hash_method to control whether you want postgresql user password to be hashed with md5 or want to use db default. When zabbix_server_dbpassword_hash_method is set to anything other than md5 then do not hash the password with md5 so you could use postgresql scram-sha-256 hashing method. -- zabbix_templategroup module added - -dellemc.enterprise_sonic -~~~~~~~~~~~~~~~~~~~~~~~~ - -- sonic_aaa - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/304). -- sonic_aaa - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_acl_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/306). -- sonic_acl_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_bgp_as_paths - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/290). -- sonic_bgp_communities - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/251). -- sonic_bgp_ext_communities - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/252). -- sonic_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/301). -- sonic_interfaces - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). -- sonic_interfaces - Change deleted design for interfaces module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/310). -- sonic_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_ip_neighbor - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/285). -- sonic_ip_neighbor - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_l2_acls - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/306). -- sonic_l2_acls - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_l2_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/303). -- sonic_l2_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_l3_acls - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/306). -- sonic_l3_acls - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_l3_interfaces - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/241). -- sonic_lag_interfaces - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/303). -- sonic_lag_interfaces - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_logging - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/285). -- sonic_logging - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_mclag - Add VLAN range support for 'unique_ip' and 'peer_gateway' options (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/288). -- sonic_mclag - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/288). -- sonic_ntp - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/281). -- sonic_ntp - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_port_breakout - Add Ansible support for all port breakout modes now allowed in Enterprise SONiC (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/276). -- sonic_port_breakout - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/291). -- sonic_port_group - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/284). -- sonic_port_group - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_radius_server - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/279). -- sonic_radius_server - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_static_routes - Add playbook check and diff modes support for static routes resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/313). -- sonic_static_routes - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_system - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/284). -- sonic_system - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_tacacs_server - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/281). -- sonic_tacacs_server - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_users - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/304). -- sonic_users - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_vlans - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/301). -- sonic_vlans - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- sonic_vrfs - Add mgmt VRF replaced state handling to sonic_vrfs module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/298). -- sonic_vrfs - Add mgmt VRF support to sonic_vrfs module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/293). -- sonic_vrfs - Add support for playbook check and diff modes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/285). -- sonic_vrfs - Enhance config diff generation function (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/318). -- tests - Add UTs for BFD, COPP, and MAC modules (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/287). -- tests - Enable contiguous execution of all regression integration tests on an S5296f (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/277). -- tests - Fix the bgp CLI test base_cfg_path derivation of the bgp role_path by avoiding relative pathing from the possibly external playbook_dir (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/283). - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- For idrac_certificate role, added support for import operation of `HTTPS` certificate with the SSL key. -- For idrac_certificates module, below enhancements are made: Added support for import operation of `HTTPS` certificate with the SSL key. The `email_address` has been made as an optional parameter. -- For idrac_gather_facts role, added storage controller details in the role output. - -grafana.grafana -~~~~~~~~~~~~~~~ - -- Bump cryptography from 41.0.4 to 41.0.6 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/126 -- Drop curl check by @v-zhuravlev in https://github.com/grafana/grafana-ansible-collection/pull/120 -- Fix check mode for grafana role by @Boschung-Mecatronic-AG-Infrastructure in https://github.com/grafana/grafana-ansible-collection/pull/125 -- Fix check mode in Grafana Agent by @AmandaCameron in https://github.com/grafana/grafana-ansible-collection/pull/124 -- Update tags in README by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/121 - -ibm.storage_virtualize -~~~~~~~~~~~~~~~~~~~~~~ - -- ibm_sv_manage_replication_policy - Added support to configure a 2-site-ha policy. -- ibm_sv_manage_snapshot - Added support to restore entire volumegroup from a snapshot of that volumegroup. -- ibm_svc_host - Added support to create nvmetcp host. -- ibm_svc_info - Added support to display information about thinclone/clone volumes and volumegroups. -- ibm_svc_manage_volumgroup - Added support to delete volumegroups keeping volumes via 'evictvolumes'. - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_cifs_server - new option `lm_compatibility_level` added in REST, requires ONTAP 9.8 or later. -- na_ontap_cluster - new option `certificate.uuid` added in REST, requires ONTAP 9.10 or later. -- na_ontap_cluster_peer - added REST only support for modifying remote intercluster addresses in cluster peer relation. -- na_ontap_ems_destination - new options `syslog`, `port`, `transport`, `message_format`, `timestamp_format_override` and `hostname_format_override` added in REST, requires ONTAP 9.12.1 or later. -- na_ontap_s3_services - create, modify S3 service returns `s3_service_info` in module output. -- na_ontap_snapmirror - updated resync and resume operation for synchronous snapmirror relationship in REST. - -netbox.netbox -~~~~~~~~~~~~~ - -- nb_inventory - Add facility group_by option [#1059](https://github.com/netbox-community/ansible_modules/pull/1059) -- nb_inventory - Enable ansible-vault strings in config-context data [#1114](https://github.com/netbox-community/ansible_modules/pull/1114) -- netbox_platform - Add config_template option to netbox_platform [#1119](https://github.com/netbox-community/ansible_modules/pull/1119) -- netbox_power_port_template - Add option module_type to netbox_power_port_template [#1105](https://github.com/netbox-community/ansible_modules/pull/1105) - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- all - ``distro`` package added as a pre-requisite -- multiple - Remove packaging pre-requisite. -- multiple - Where only REST 2.x endpoints are used, convert to REST 2.x methodology. -- purefa_info - Expose NFS security flavor for policies -- purefa_info - Expose cloud capacity details if array is a Cloud Block Store. -- purefa_policy - Add SMB user based enumeration parameter -- purefa_policy - Added NFS security flavors for accessing files in the mount point. -- purefa_policy - Remove default setting for nfs_version to allow for change of version at policy level - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purefb_bucket - Add support for public buckets -- purefb_bucket - From REST 2.12 the `mode` parameter default changes to `multi-site-writable`. -- purefb_fs - Added SMB Continuous Availability parameter. Requires REST 2.12 or higher. -- purefb_info - Added enhanced information for buckets, filesystems and snapshots, based on new features in REST 2.12 -- purefb_s3acc - Add support for public buckets -- purefb_s3acc - Remove default requirements for ``hard_limit`` and ``default_hard_limit`` - -vultr.cloud -~~~~~~~~~~~ - -- Added retry on HTTP 504 returned by the API (https://github.com/vultr/ansible-collection-vultr/pull/104). -- Implemented a feature to distinguish resources by region if available. This allows to have identical name per region e.g. a VPC named ``default`` in each region. (https://github.com/vultr/ansible-collection-vultr/pull/98). -- instance - Added a new param ``user_scheme`` to change user scheme to non-root on Linux while creating the instance (https://github.com/vultr/ansible-collection-vultr/issues/96). - -Deprecated Features -------------------- - -community.dns -~~~~~~~~~~~~~ - -- hetzner_dns_records and hosttech_dns_records inventory plugins - the ``filters`` option has been renamed to ``simple_filters``. The old name will stop working in community.hrobot 2.0.0 (https://github.com/ansible-collections/community.dns/pull/181). - -community.docker -~~~~~~~~~~~~~~~~ - -- docker_container - the default ``ignore`` for the ``image_name_mismatch`` parameter has been deprecated and will switch to ``recreate`` in community.docker 4.0.0. A deprecation warning will be printed in situations where the default value is used and where a behavior would change once the default changes (https://github.com/ansible-collections/community.docker/pull/703). - -community.general -~~~~~~~~~~~~~~~~~ - -- consul_acl - the module has been deprecated and will be removed in community.general 10.0.0. ``consul_token`` and ``consul_policy`` can be used instead (https://github.com/ansible-collections/community.general/pull/7901). - -community.hrobot -~~~~~~~~~~~~~~~~ - -- robot inventory plugin - the ``filters`` option has been renamed to ``simple_filters``. The old name will stop working in community.hrobot 2.0.0 (https://github.com/ansible-collections/community.hrobot/pull/94). - -Security Fixes --------------- - -Ansible-core -~~~~~~~~~~~~ - -- ANSIBLE_NO_LOG - Address issue where ANSIBLE_NO_LOG was ignored (CVE-2024-0690) - -Bugfixes --------- - -Ansible-core -~~~~~~~~~~~~ - -- Run all handlers with the same ``listen`` topic, even when notified from another handler (https://github.com/ansible/ansible/issues/82363). -- ``ansible-galaxy role import`` - fix using the ``role_name`` in a standalone role's ``galaxy_info`` metadata by disabling automatic removal of the ``ansible-role-`` prefix. This matches the behavior of the Galaxy UI which also no longer implicitly removes the ``ansible-role-`` prefix. Use the ``--role-name`` option or add a ``role_name`` to the ``galaxy_info`` dictionary in the role's ``meta/main.yml`` to use an alternate role name. -- ``ansible-test sanity --test runtime-metadata`` - add ``action_plugin`` as a valid field for modules in the schema (https://github.com/ansible/ansible/pull/82562). -- ansible-config init will now dedupe ini entries from plugins. -- ansible-galaxy role import - exit with 1 when the import fails (https://github.com/ansible/ansible/issues/82175). -- ansible-galaxy role install - normalize tarfile paths and symlinks using ``ansible.utils.path.unfrackpath`` and consider them valid as long as the realpath is in the tarfile's role directory (https://github.com/ansible/ansible/issues/81965). -- delegate_to when set to an empty or undefined variable will now give a proper error. -- dwim functions for lookups should be better at detectging role context even in abscense of tasks/main. -- roles, code cleanup and performance optimization of dependencies, now cached, and ``public`` setting is now determined once, at role instantiation. -- roles, the ``static`` property is now correctly set, this will fix issues with ``public`` and ``DEFAULT_PRIVATE_ROLE_VARS`` controls on exporting vars. -- unsafe data - Address an incompatibility when iterating or getting a single index from ``AnsibleUnsafeBytes`` -- unsafe data - Address an incompatibility with ``AnsibleUnsafeText`` and ``AnsibleUnsafeBytes`` when pickling with ``protocol=0`` -- unsafe data - Enable directly using ``AnsibleUnsafeText`` with Python ``pathlib`` (https://github.com/ansible/ansible/issues/82414) - -amazon.aws -~~~~~~~~~~ - -- ec2_vpc_subnet - cleanly handle failure when subnet isn't created in time (https://github.com/ansible-collections/amazon.aws/pull/1848). -- iam_managed_policy - fixed an issue where only partial results were returned (https://github.com/ansible-collections/amazon.aws/pull/1936). -- s3_object - Fix typo that caused false deprecation warning when setting ``overwrite=latest`` (https://github.com/ansible-collections/amazon.aws/pull/1847). -- 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). - -check_point.mgmt -~~~~~~~~~~~~~~~~ - -- httpapi/checkpoint.py - Raise a fatal error if login wasn't successful. - -cisco.meraki -~~~~~~~~~~~~ - -- Adding `smartquotes = False` to `conf.py` and romoving `'` from rst files. -- Adding build_ignore property to galaxy file. -- Adding support to ansible.utils >=3.0 - -community.aws -~~~~~~~~~~~~~ - -- aws_ssm - disable ``enable-bracketed-paste`` to fix issue with amazon linux 2023 and other OSes (https://github.com/ansible-collections/community.aws/issues/1756) - -community.crypto -~~~~~~~~~~~~~~~~ - -- acme_* modules - directly react on bad return data for account creation/retrieval/updating requests (https://github.com/ansible-collections/community.crypto/pull/682). -- acme_* modules - fix improved error reporting in case of socket errors, bad status lines, and unknown connection errors (https://github.com/ansible-collections/community.crypto/pull/684). -- acme_* modules - increase number of retries from 5 to 10 to increase stability with unstable ACME endpoints (https://github.com/ansible-collections/community.crypto/pull/685). -- acme_* modules - make account registration handling more flexible to accept 404 instead of 400 send by DigiCert's ACME endpoint when an account does not exist (https://github.com/ansible-collections/community.crypto/pull/681). -- openssl_dhparam - was using an internal function instead of the public API to load DH param files when using the ``cryptography`` backend. The internal function was removed in cryptography 42.0.0. The module now uses the public API, which has been available since support for DH params was added to cryptography (https://github.com/ansible-collections/community.crypto/pull/698). -- openssl_privatekey_info - ``check_consistency=true`` no longer works for RSA keys with cryptography 42.0.0+ (https://github.com/ansible-collections/community.crypto/pull/701). -- openssl_privatekey_info - ``check_consistency=true`` now reports a warning if it cannot determine consistency (https://github.com/ansible-collections/community.crypto/pull/705). - -community.digitalocean -~~~~~~~~~~~~~~~~~~~~~~ - -- The C(project_name) parameter for many modules was used by alias C(project) internally in the codebase, but to work properly C(project_name) must be used in the code. Replace self.module.params.get("project") with self.module.params.get("project_name") (https://github.com/ansible-collections/community.digitalocean/issues/326). -- digital_ocean_kubernetes - module didn't return kubeconfig properly, return documentation was invalid. Fixed version returns data with the same structure all the time, also it is aligned with M(community.digitalocean.digital_ocean_kubernetes_info) documentation return data now. (https://github.com/ansible-collections/community.digitalocean/issues/322). -- inventory plugin - restore reading auth token from env variables (https://github.com/ansible-collections/community.digitalocean/pull/315). - -community.dns -~~~~~~~~~~~~~ - -- Update Public Suffix List. -- wait_for_txt, nameserver_info, nameserver_record_info - when looking up nameservers for a domain, do not treat ``NXDOMAIN`` as a fatal error (https://github.com/ansible-collections/community.dns/pull/177). - -community.docker -~~~~~~~~~~~~~~~~ - -- Use ``unix:///var/run/docker.sock`` instead of the legacy ``unix://var/run/docker.sock`` as default for ``docker_host`` (https://github.com/ansible-collections/community.docker/pull/736). -- docker_compose_v2 - properly parse dry-run build events from ``stderr`` (https://github.com/ansible-collections/community.docker/issues/778, https://github.com/ansible-collections/community.docker/pull/779). -- docker_compose_v2_pull - the module was documented as part of the ``community.docker.docker`` action group, but was not actually part of it. That has now been fixed (https://github.com/ansible-collections/community.docker/pull/773). -- docker_image - fix archiving idempotency with Docker API 1.44 or later (https://github.com/ansible-collections/community.docker/pull/765). -- modules and plugins using the Docker SDK for Python - remove ``ssl_version`` from the parameters passed to Docker SDK for Python 7.0.0+. Explicitly fail with a nicer error message if it was explicitly set in this case (https://github.com/ansible-collections/community.docker/pull/715). -- modules and plugins using the Docker SDK for Python - remove ``tls_hostname`` from the parameters passed to Docker SDK for Python 7.0.0+. Explicitly fail with a nicer error message if it was explicitly set in this case (https://github.com/ansible-collections/community.docker/pull/721). -- vendored Docker SDK for Python - avoid passing on ``ssl_version`` and ``tls_hostname`` if they were not provided by the user. Remove dead code. (https://github.com/ansible-collections/community.docker/pull/722). - -community.general -~~~~~~~~~~~~~~~~~ - -- homebrew - detect already installed formulae and casks using JSON output from ``brew info`` (https://github.com/ansible-collections/community.general/issues/864). -- incus connection plugin - treats ``inventory_hostname`` as a variable instead of a literal in remote connections (https://github.com/ansible-collections/community.general/issues/7874). -- ipa_otptoken - the module expect ``ipatokendisabled`` as string but the ``ipatokendisabled`` value is returned as a boolean (https://github.com/ansible-collections/community.general/pull/7795). -- keycloak_identity_provider - ``mappers`` processing was not idempotent if the mappers configuration list had not been sorted by name (in ascending order). Fix resolves the issue by sorting mappers in the desired state using the same key which is used for obtaining existing state (https://github.com/ansible-collections/community.general/pull/7418). -- keycloak_identity_provider - it was not possible to reconfigure (add, remove) ``mappers`` once they were created initially. Removal was ignored, adding new ones resulted in dropping the pre-existing unmodified mappers. Fix resolves the issue by supplying correct input to the internal update call (https://github.com/ansible-collections/community.general/pull/7418). -- keycloak_user - when ``force`` is set, but user does not exist, do not try to delete it (https://github.com/ansible-collections/community.general/pull/7696). -- ldap - previously the order number (if present) was expected to follow an equals sign in the DN. This makes it so the order number string is identified correctly anywhere within the DN (https://github.com/ansible-collections/community.general/issues/7646). -- mssql_script - make the module work with Python 2 (https://github.com/ansible-collections/community.general/issues/7818, https://github.com/ansible-collections/community.general/pull/7821). -- nmcli - fix ``connection.slave-type`` wired to ``bond`` and not with parameter ``slave_type`` in case of connection type ``wifi`` (https://github.com/ansible-collections/community.general/issues/7389). -- proxmox - fix updating a container config if the setting does not already exist (https://github.com/ansible-collections/community.general/pull/7872). -- proxmox_kvm - running ``state=template`` will first check whether VM is already a template (https://github.com/ansible-collections/community.general/pull/7792). -- statusio_maintenance - fix error caused by incorrectly formed API data payload. Was raising "Failed to create maintenance HTTP Error 400 Bad Request" caused by bad data type for date/time and deprecated dict keys (https://github.com/ansible-collections/community.general/pull/7754). - -community.grafana -~~~~~~~~~~~~~~~~~ - -- Add `grafana_organiazion_user` to `action_groups.grafana` -- Fixed orgId handling in diff comparison for `grafana_datasource` if using org_name - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- postgresql_query - now reports not changed for queries starting with "SHOW" (https://github.com/ansible-collections/community.postgresql/pull/592). -- postgresql_user - module failed when running against an SQL_ASCII encoded database as the user's current password was returned as bytes as opposed to a str. Fix now checks for this case and decodes the bytes as an ascii encoded string. (https://github.com/ansible-collections/community.postgresql/issues/584). - -community.sap_libs -~~~~~~~~~~~~~~~~~~ - -- fixes failures in sanity test for all modules - -community.vmware -~~~~~~~~~~~~~~~~ - -- Fix InsecureRequestWarning for modules based on the VmwareRestClient module util when setting ``validate_certs`` to ``False`` (https://github.com/ansible-collections/community.vmware/pull/1969). -- module_utils/vmware.py - remove ssl.wrap_socet() function. Replaced for code based on ssl.get_server_certificate (https://github.com/ansible-collections/community.vmware/issues/1930). -- vmware_guest - Fix failure of vm reconfiguration with enabled virt_based_security (https://github.com/ansible-collections/community.vmware/pull/1848). - -community.zabbix -~~~~~~~~~~~~~~~~ - -- Avoid to update user-directory configuration in dry run. -- api module - Fixed certificiate errors -- proxy and server roles - Defaulted location of fping and fping6 based on OS. -- proxy role - Removed requirement for mysql group definition. -- server role - typo in configuration var StasAllowedIP to StatsAllowedIP -- zabbix-{agent, javagateway, proxy, server, web} - support raspberry pi without repository url specification - -dellemc.enterprise_sonic -~~~~~~~~~~~~~~~~~~~~~~~~ - -- requirements - Update requires_ansible version in meta/runtime.yml to the oldest supported version (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/321). -- sonic_bgp_communities - Fix incorrect "facts" handling for parsing of a BGP community list configured with an empty "members" list (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/319). -- sonic_bgp_neighbors - Fix prefix-limit issue (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/289). -- sonic_interfaces - Add warnings when speed and auto_negotiate is configured at same time (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). -- sonic_interfaces - Fix support for standard naming interfaces (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). -- sonic_interfaces - Prevent configuring speed in port group interfaces (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/314). -- sonic_stp - Correct the commands list for STP delete state (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/302). - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- Fixed the issue for ignoring the environment variable `NO_PROXY` earlier. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/554) -- For idrac_certificates module, the `email_address` has been made as an optional parameter. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/582). -- Issue is fixed for deploying a new configuration on quick deploy slot when IPv6 is disabled.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/533) - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- Added missing enum values for some arguments. -- Change minimum required ansible-core version to 2.14.0 -- Fixed a bug where ansible may skip update incorrectly. -- Support FortiManager 7.0.10 - -infoblox.nios_modules -~~~~~~~~~~~~~~~~~~~~~ - -- Fixes environment variable max_results using INFOBLOX_MAX_RESULTS `#209 `_ -- Fixes index error for transform fields in DTC LBDN (auth_zone and Pool) and DTC POOL (servers and monitors) `#209 `_ -- Fixes typo for environment variable INFOBLOX_WAPI_VERSION `#209 `_ - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_nfs - fix error with `windows` in REST for ONTAP 9.10 or earlier. -- na_ontap_security_certificates - fix error with ontap_info returned in module output in REST. -- na_ontap_snapshot_policy - fix issue with modifying snapshot policy in REST. -- na_ontap_volume - modified `type` to be case insensitive in REST. - -netbox.netbox -~~~~~~~~~~~~~ - -- Improve error reporting for missing module [#1126](https://github.com/netbox-community/ansible_modules/pull/1126) -- nb_inventory - Fix API cache failure [#1111](https://github.com/netbox-community/ansible_modules/pull/1111) -- nb_lookup - Allow multiple IDs in nb_lookup [#1042](https://github.com/netbox-community/ansible_modules/pull/1042) - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purefa_ds - Fix issue with SDK returning empty data for data directory services even when it does exist -- purefa_policy - Fix incorrect call of psot instead of patch for NFS policies - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purefb_info - Added missing object lock retention details if enabledd - -vultr.cloud -~~~~~~~~~~~ - -- Fixed an error while waiting for a specific state and the API returns an empty response. (https://github.com/vultr/ansible-collection-vultr/issues/108). -- Fixed an issue with waiting for state (https://github.com/vultr/ansible-collection-vultr/pull/102). -- instance_info - Fixed the alias ``name`` being was used on the wrong argument. (https://github.com/vultr/ansible-collection-vultr/issues/105). -- reserved_ip - Fixed an issue which caused the module to fail, also enabled integration tests (https://github.com/vultr/ansible-collection-vultr/issues/92). - -Known Issues ------------- - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- idrac_firmware - Issue(279282) - This module does not support firmware update using HTTP, HTTPS, and FTP shares with authentication on iDRAC8. -- idrac_network_attributes - Issue(279049) - If unsupported values are provided for the parameter ``ome_network_attributes``, then this module does not provide a correct error message. -- ome_device_network_services - Issue(212681) - The module does not provide a proper error message if unsupported values are provided for the following parameters- port_number, community_name, max_sessions, max_auth_retries, and idle_timeout. -- ome_device_power_settings - Issue(212679) - The module displays the following message if the value provided for the parameter ``power_cap`` is not within the supported range of 0 to 32767, ``Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI.`` -- ome_device_quick_deploy - Issue(275231) - This module does not deploy a new configuration to a slot that has disabled IPv6. -- ome_diagnostics - Issue(279193) - Export of SupportAssist collection logs to the share location fails on OME version 4.0.0. -- ome_smart_fabric_uplink - Issue(186024) - The module supported by OpenManage Enterprise Modular, however it does not allow the creation of multiple uplinks of the same name. If an uplink is created using the same name as an existing uplink, then the existing uplink is modified. - -New Plugins ------------ - -Connection -~~~~~~~~~~ - -- community.general.incus - Run tasks in Incus instances via the Incus CLI. - -Filter -~~~~~~ - -- community.general.from_ini - Converts INI text input into a dictionary -- community.general.to_ini - Converts a dictionary to the INI file format - -Lookup -~~~~~~ - -- community.general.github_app_access_token - Obtain short-lived Github App Access tokens - -New Modules ------------ - -check_point.mgmt -~~~~~~~~~~~~~~~~ - -- check_point.mgmt.cp_mgmt_add_central_license - Add central license. -- check_point.mgmt.cp_mgmt_central_license_facts - Get central-license objects facts on Checkpoint over Web Services API. -- check_point.mgmt.cp_mgmt_delete_central_license - Delete central license. -- check_point.mgmt.cp_mgmt_distribute_cloud_licenses - Distribute licenses to target CloudGuard gateways. -- check_point.mgmt.cp_mgmt_show_cloud_licenses_usage - Show attached licenses usage. -- check_point.mgmt.cp_mgmt_show_ha_status - Retrieve domain high availability status. - -community.digitalocean -~~~~~~~~~~~~~~~~~~~~~~ - -- community.digitalocean.digital_ocean_project_resource_info - Gather information about DigitalOcean Project Resources - -community.docker -~~~~~~~~~~~~~~~~ - -- community.docker.docker_compose_v2 - Manage multi-container Docker applications with Docker Compose CLI plugin -- community.docker.docker_compose_v2_pull - Pull a Docker compose project -- community.docker.docker_image_build - Build Docker images using Docker buildx -- community.docker.docker_image_export - Export (archive) Docker images -- community.docker.docker_image_pull - Pull Docker images from registries -- community.docker.docker_image_push - Push Docker images to registries -- community.docker.docker_image_remove - Remove Docker images -- community.docker.docker_image_tag - Tag Docker images with new names and/or tags - -community.general -~~~~~~~~~~~~~~~~~ - -- community.general.consul_acl_bootstrap - Bootstrap ACLs in Consul -- community.general.consul_auth_method - Manipulate Consul auth methods -- community.general.consul_binding_rule - Manipulate Consul binding rules -- community.general.consul_token - Manipulate Consul tokens -- community.general.dnf_config_manager - Enable or disable dnf repositories using config-manager -- community.general.gitlab_label - Creates/updates/deletes GitLab Labels belonging to project or group. -- community.general.gitlab_milestone - Creates/updates/deletes GitLab Milestones belonging to project or group -- community.general.keycloak_component_info - Retrive component info in Keycloak -- community.general.keycloak_realm_rolemapping - Allows administration of Keycloak realm role mappings into groups with the Keycloak API -- community.general.proxmox_node_info - Retrieve information about one or more Proxmox VE nodes -- community.general.proxmox_storage_contents_info - List content from a Proxmox VE storage - -dellemc.enterprise_sonic -~~~~~~~~~~~~~~~~~~~~~~~~ - -- dellemc.enterprise_sonic.sonic_dhcp_snooping - Manage DHCP Snooping on SONiC -- dellemc.enterprise_sonic.sonic_pki - Manages PKI attributes of Enterprise Sonic -- dellemc.enterprise_sonic.sonic_stp - Manage STP configuration on SONiC - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- dellemc.openmanage.idrac_license - This module allows to import, export, and delete licenses on iDRAC. - -infoblox.nios_modules -~~~~~~~~~~~~~~~~~~~~~ - -- infoblox.nios_modules.nios_dtc_monitor_http - Configures the Infoblox NIOS DTC HTTP monitor. -- infoblox.nios_modules.nios_dtc_monitor_icmp - Configures the Infoblox NIOS DTC ICMP monitor -- infoblox.nios_modules.nios_dtc_monitor_pdp - Configures the Infoblox NIOS DTC PDP monitor -- infoblox.nios_modules.nios_dtc_monitor_sip - Configures the Infoblox NIOS DTC SIP monitor -- infoblox.nios_modules.nios_dtc_monitor_snmp - Configures the Infoblox NIOS DTC SNMP monitor -- infoblox.nios_modules.nios_dtc_monitor_tcp - Configures the Infoblox NIOS DTC TCP monitor -- infoblox.nios_modules.nios_dtc_topology - Configures the Infoblox NIOS DTC Topology - -netapp.ontap -~~~~~~~~~~~~ - -- netapp.ontap.na_ontap_cifs_unix_symlink_mapping - NetApp ONTAP module to manage UNIX symbolic link mapping for CIFS clients. -- netapp.ontap.na_ontap_cli_timeout - NetApp ONTAP module to set the CLI inactivity timeout value. -- netapp.ontap.na_ontap_snmp_config - NetApp ONTAP module to modify SNMP configuration. - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purestorage.flashblade.purefb_hardware - Manage FlashBlade Hardware - -vultr.cloud -~~~~~~~~~~~ - -- vultr.cloud.object_storage - Manages object storages on Vultr - -Unchanged Collections ---------------------- - -- ansible.netcommon (still version 5.3.0) -- ansible.posix (still version 1.5.4) -- ansible.utils (still version 2.12.0) -- ansible.windows (still version 2.2.0) -- arista.eos (still version 6.2.2) -- azure.azcollection (still version 1.19.0) -- chocolatey.chocolatey (still version 1.5.1) -- cisco.aci (still version 2.8.0) -- cisco.asa (still version 4.0.3) -- cisco.ios (still version 5.3.0) -- cisco.iosxr (still version 6.1.1) -- cisco.mso (still version 2.5.0) -- cisco.nxos (still version 5.3.0) -- cisco.ucs (still version 1.10.0) -- cloud.common (still version 2.1.4) -- cloudscale_ch.cloud (still version 2.3.1) -- community.azure (still version 2.0.0) -- community.ciscosmb (still version 1.0.7) -- community.libvirt (still version 1.3.0) -- community.mongodb (still version 1.6.3) -- community.mysql (still version 3.8.0) -- community.network (still version 5.0.2) -- community.okd (still version 2.3.0) -- community.proxysql (still version 1.5.1) -- community.rabbitmq (still version 1.2.3) -- community.sap (still version 2.0.0) -- community.sops (still version 1.6.7) -- community.windows (still version 2.1.0) -- containers.podman (still version 1.11.0) -- cyberark.conjur (still version 1.2.2) -- dellemc.powerflex (still version 2.1.0) -- dellemc.unity (still version 1.7.1) -- f5networks.f5_modules (still version 1.27.1) -- fortinet.fortios (still version 2.3.4) -- frr.frr (still version 2.0.2) -- gluster.gluster (still version 1.0.2) -- google.cloud (still version 1.3.0) -- hetzner.hcloud (still version 2.4.1) -- hpe.nimble (still version 1.1.4) -- ibm.qradar (still version 2.1.0) -- ibm.spectrum_virtualize (still version 2.0.0) -- infinidat.infinibox (still version 1.3.12) -- inspur.ispim (still version 2.2.0) -- inspur.sm (still version 2.3.0) -- junipernetworks.junos (still version 5.3.1) -- kubernetes.core (still version 2.4.0) -- lowlydba.sqlserver (still version 2.2.2) -- microsoft.ad (still version 1.4.1) -- netapp.aws (still version 21.7.1) -- netapp.azure (still version 21.10.1) -- netapp.cloudmanager (still version 21.22.1) -- netapp.elementsw (still version 21.7.0) -- netapp.storagegrid (still version 21.11.1) -- netapp.um_info (still version 21.8.1) -- netapp_eseries.santricity (still version 1.4.0) -- ngine_io.cloudstack (still version 2.3.0) -- ngine_io.exoscale (still version 1.1.0) -- openstack.cloud (still version 2.2.0) -- openvswitch.openvswitch (still version 2.1.1) -- ovirt.ovirt (still version 3.2.0) -- purestorage.fusion (still version 1.6.0) -- sensu.sensu_go (still version 1.14.0) -- splunk.es (still version 2.1.2) -- t_systems_mms.icinga_director (still version 2.0.1) -- telekom_mms.icinga_director (still version 1.35.0) -- theforeman.foreman (still version 3.15.0) -- vmware.vmware_rest (still version 2.3.1) -- vyos.vyos (still version 4.1.0) -- wti.remote (still version 1.0.5) - -v9.1.0 -====== - -.. contents:: - :local: - :depth: 2 - -Release Summary ---------------- - -Release Date: 2023-12-05 - -`Porting Guide `_ - -Ansible-core ------------- - -Ansible 9.1.0 contains ansible-core version 2.16.1. -This is a newer version than version 2.16.0 contained in the previous Ansible release. - -The changes are reported in the combined changelog below. - -Changed Collections -------------------- - -If not mentioned explicitly, the changes are reported in the combined changelog below. - -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| Collection | Ansible 9.0.1 | Ansible 9.1.0 | Notes | -+=============================+===============+===============+==============================================================================================================================+ -| ansible.utils | 2.11.0 | 2.12.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| ansible.windows | 2.1.0 | 2.2.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| arista.eos | 6.2.1 | 6.2.2 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| awx.awx | 23.3.1 | 23.5.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.dnac | 6.7.6 | 6.8.1 | The collection did not have a changelog in this version. | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ios | 5.2.0 | 5.3.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.iosxr | 6.1.0 | 6.1.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ise | 2.5.16 | 2.6.2 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.meraki | 2.16.14 | 2.16.16 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| cisco.nxos | 5.2.1 | 5.3.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.crypto | 2.16.0 | 2.16.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.dns | 2.6.3 | 2.6.4 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.general | 8.0.2 | 8.1.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.routeros | 2.10.0 | 2.11.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.vmware | 4.0.0 | 4.0.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.windows | 2.0.0 | 2.1.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| community.zabbix | 2.1.0 | 2.2.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.openmanage | 8.4.0 | 8.5.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.powerflex | 2.0.1 | 2.1.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| f5networks.f5_modules | 1.27.0 | 1.27.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| google.cloud | 1.2.0 | 1.3.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| hetzner.hcloud | 2.3.0 | 2.4.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| inspur.ispim | 2.1.0 | 2.2.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| junipernetworks.junos | 5.3.0 | 5.3.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| microsoft.ad | 1.3.0 | 1.4.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| netapp.ontap | 22.8.2 | 22.8.3 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| openstack.cloud | 2.1.0 | 2.2.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flasharray | 1.22.0 | 1.24.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| splunk.es | 2.1.0 | 2.1.2 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| telekom_mms.icinga_director | 1.34.1 | 1.35.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| theforeman.foreman | 3.14.0 | 3.15.0 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ -| vultr.cloud | 1.10.0 | 1.10.1 | | -+-----------------------------+---------------+---------------+------------------------------------------------------------------------------------------------------------------------------+ - -Minor Changes -------------- - -ansible.utils -~~~~~~~~~~~~~ - -- Fact_diff filter plugin - Add fact_diff filter plugin. (https://github.com/ansible-collections/ansible.utils/issues/78). - -ansible.windows -~~~~~~~~~~~~~~~ - -- Set minimum supported Ansible version to 2.14 to align with the versions still supported by Ansible. -- win_share - Added a new param called ``scope_name`` that allows file shares to be scoped for Windows Server failover cluster roles. - -cisco.ios -~~~~~~~~~ - -- Added ios_evpn_evi resource module. -- Added ios_evpn_global resource module. -- Added ios_vxlan_vtep resource module. -- Fixed ios_evpn_evi resource module integration test failure - code to remove VLAN config. -- ios_bgp_address_family - Fixed an issue with inherit peer-policy CLI -- ios_bgp_address_family - added 'advertise' key -- ios_vlans - added vlan config CLI feature. -- ios_vrf - added MDT related keys - -cisco.ise -~~~~~~~~~ - -- Services included configuration, edda, dataconnect_services, subscriber. - -cisco.nxos -~~~~~~~~~~ - -- nxos_config - Relax restrictions on I(src) parameter so it can be used more like I(lines). (https://github.com/ansible-collections/cisco.nxos/issues/89). - -community.general -~~~~~~~~~~~~~~~~~ - -- bitwarden lookup plugin - when looking for items using an item ID, the item is now accessed directly with ``bw get item`` instead of searching through all items. This doubles the lookup speed (https://github.com/ansible-collections/community.general/pull/7468). -- elastic callback plugin - close elastic client to not leak resources (https://github.com/ansible-collections/community.general/pull/7517). -- git_config - allow multiple git configs for the same name with the new ``add_mode`` option (https://github.com/ansible-collections/community.general/pull/7260). -- git_config - the ``after`` and ``before`` fields in the ``diff`` of the return value can be a list instead of a string in case more configs with the same key are affected (https://github.com/ansible-collections/community.general/pull/7260). -- git_config - when a value is unset, all configs with the same key are unset (https://github.com/ansible-collections/community.general/pull/7260). -- gitlab modules - add ``ca_path`` option (https://github.com/ansible-collections/community.general/pull/7472). -- gitlab modules - remove duplicate ``gitlab`` package check (https://github.com/ansible-collections/community.general/pull/7486). -- gitlab_runner - add support for new runner creation workflow (https://github.com/ansible-collections/community.general/pull/7199). -- ipa_config - adds ``passkey`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7588). -- ipa_sudorule - adds options to include denied commands or command groups (https://github.com/ansible-collections/community.general/pull/7415). -- ipa_user - adds ``idp`` and ``passkey`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7589). -- irc - add ``validate_certs`` option, and rename ``use_ssl`` to ``use_tls``, while keeping ``use_ssl`` as an alias. The default value for ``validate_certs`` is ``false`` for backwards compatibility. We recommend to every user of this module to explicitly set ``use_tls=true`` and `validate_certs=true`` whenever possible, especially when communicating to IRC servers over the internet (https://github.com/ansible-collections/community.general/pull/7550). -- keycloak module utils - expose error message from Keycloak server for HTTP errors in some specific situations (https://github.com/ansible-collections/community.general/pull/7645). -- keycloak_user_federation - add option for ``krbPrincipalAttribute`` (https://github.com/ansible-collections/community.general/pull/7538). -- lvol - change ``pvs`` argument type to list of strings (https://github.com/ansible-collections/community.general/pull/7676, https://github.com/ansible-collections/community.general/issues/7504). -- lxd connection plugin - tighten the detection logic for lxd ``Instance not found`` errors, to avoid false detection on unrelated errors such as ``/usr/bin/python3: not found`` (https://github.com/ansible-collections/community.general/pull/7521). -- netcup_dns - adds support for record types ``OPENPGPKEY``, ``SMIMEA``, and ``SSHFP`` (https://github.com/ansible-collections/community.general/pull/7489). -- nmcli - add support for new connection type ``loopback`` (https://github.com/ansible-collections/community.general/issues/6572). -- nmcli - allow for ``infiniband`` slaves of ``bond`` interface types (https://github.com/ansible-collections/community.general/pull/7569). -- nmcli - allow for the setting of ``MTU`` for ``infiniband`` and ``bond`` interface types (https://github.com/ansible-collections/community.general/pull/7499). -- onepassword lookup plugin - support 1Password Connect with the opv2 client by setting the connect_host and connect_token parameters (https://github.com/ansible-collections/community.general/pull/7116). -- onepassword_raw lookup plugin - support 1Password Connect with the opv2 client by setting the connect_host and connect_token parameters (https://github.com/ansible-collections/community.general/pull/7116) -- passwordstore - adds ``timestamp`` and ``preserve`` parameters to modify the stored password format (https://github.com/ansible-collections/community.general/pull/7426). -- proxmox - adds ``template`` value to the ``state`` parameter, allowing conversion of container to a template (https://github.com/ansible-collections/community.general/pull/7143). -- proxmox - adds ``update`` parameter, allowing update of an already existing containers configuration (https://github.com/ansible-collections/community.general/pull/7540). -- proxmox inventory plugin - adds an option to exclude nodes from the dynamic inventory generation. The new setting is optional, not using this option will behave as usual (https://github.com/ansible-collections/community.general/issues/6714, https://github.com/ansible-collections/community.general/pull/7461). -- proxmox_disk - add ability to manipulate CD-ROM drive (https://github.com/ansible-collections/community.general/pull/7495). -- proxmox_kvm - adds ``template`` value to the ``state`` parameter, allowing conversion of a VM to a template (https://github.com/ansible-collections/community.general/pull/7143). -- proxmox_kvm - support the ``hookscript`` parameter (https://github.com/ansible-collections/community.general/issues/7600). -- proxmox_ostype - it is now possible to specify the ``ostype`` when creating an LXC container (https://github.com/ansible-collections/community.general/pull/7462). -- proxmox_vm_info - add ability to retrieve configuration info (https://github.com/ansible-collections/community.general/pull/7485). -- redfish_info - adding the ``BootProgress`` property when getting ``Systems`` info (https://github.com/ansible-collections/community.general/pull/7626). -- ssh_config - adds ``controlmaster``, ``controlpath`` and ``controlpersist`` parameters (https://github.com/ansible-collections/community.general/pull/7456). - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- api_info, api_modify - add missing DoH parameters ``doh-max-concurrent-queries``, ``doh-max-server-connections``, and ``doh-timeout`` to the ``ip dns`` path (https://github.com/ansible-collections/community.routeros/issues/230, https://github.com/ansible-collections/community.routeros/pull/235) -- api_info, api_modify - add missing parameters ``address-list``, ``address-list-timeout``, ``randomise-ports``, and ``realm`` to subpaths of the ``ip firewall`` path (https://github.com/ansible-collections/community.routeros/issues/236, https://github.com/ansible-collections/community.routeros/pull/237). -- api_info, api_modify - mark the ``interface wireless`` parameter ``running`` as read-only (https://github.com/ansible-collections/community.routeros/pull/233). -- api_info, api_modify - set the default value to ``false`` for the ``disabled`` parameter in some more paths where it can be seen in the documentation (https://github.com/ansible-collections/community.routeros/pull/237). -- api_modify - add missing ``comment`` attribute to ``/routing id`` (https://github.com/ansible-collections/community.routeros/pull/234). -- api_modify - add missing attributes to the ``routing bgp connection`` path (https://github.com/ansible-collections/community.routeros/pull/234). -- api_modify - add versioning to the ``/tool e-mail`` path (RouterOS 7.12 release) (https://github.com/ansible-collections/community.routeros/pull/234). -- api_modify - make ``/ip traffic-flow target`` a multiple value attribute (https://github.com/ansible-collections/community.routeros/pull/234). - -community.windows -~~~~~~~~~~~~~~~~~ - -- Set minimum supported Ansible version to 2.14 to align with the versions still supported by Ansible. - -community.zabbix -~~~~~~~~~~~~~~~~ - -- Added zabbix_group_events_info module -- action module - Added notify_if_canceled property -- agent and proxy roles - Set default `zabbix_api_server_port` to 80 or 443 based on `zabbix_api_use_ssl` -- agent role - Removed duplicative Windows agent task -- agent role - Standardized default yum priority to 99 -- all roles - Re-added ability to override Debian repo source -- all roles - Updated Debian repository format to 822 standard -- various - updated testing modules -- various - updated to fully qualified module names -- zabbix agent - Added capability to add additional configuration includes -- zabbix_api_info module added -- zabbix_user module - add current_passwd optional parameter to enable password updating of the currently logged in user (https://www.zabbix.com/documentation/6.4/en/manual/api/reference/user/update) - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- Ansible lint issues are fixed for the collections. -- Module ``redfish_storage_volume`` is enhanced to support reboot options and job tracking operation. - -dellemc.powerflex -~~~~~~~~~~~~~~~~~ - -- Added support for PowerFlex Denver version(4.5.x) to TB and Config role. - -f5networks.f5_modules -~~~~~~~~~~~~~~~~~~~~~ - -- bigiq_device_discovery - Changes in documentation related to Provider block - -google.cloud -~~~~~~~~~~~~ - -- anisble-test - integration tests are now run against 2.14.0 and 2.15.0 -- ansible - 2.14.0 is now the minimum version supported -- ansible-lint - fixed over a thousand reported errors -- ansible-lint - upgraded to 6.22 -- ansible-test - add support for GCP application default credentials (https://github.com/ansible-collections/google.cloud/issues/359). -- gcp_serviceusage_service - added backoff when checking for operation completion. -- gcp_serviceusage_service - use alloyb API for the integration test as spanner conflicts with other tests -- gcp_sql_ssl_cert - made sha1_fingerprint optional, which enables resource creation -- gcp_storage_default_object_acl - removed non-existent fields; the resource is not usable. - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- Add the `hetzner.hcloud.all` group to configure all the modules using `module_defaults`. -- Allow to set the `api_endpoint` module argument using the `HCLOUD_ENDPOINT` environment variable. -- Removed the `hcloud_` prefix from all modules names, e.g. `hetzner.hcloud.hcloud_firewall` was renamed to `hetzner.hcloud.firewall`. Old module names will continue working. -- Renamed the `endpoint` module argument to `api_endpoint`, backward compatibility is maintained using an alias. -- hcloud inventory - Add the `api_endpoint` option. -- hcloud inventory - Deprecate the `api_token_env` option, suggest using a lookup plugin (`{{ lookup('ansible.builtin.env', 'YOUR_ENV_VAR') }}`) or use the well-known `HCLOUD_TOKEN` environment variable name. -- hcloud inventory - Rename the `token_env` option to `api_token_env`, use aliases for backward compatibility. -- hcloud inventory - Rename the `token` option to `api_token`, use aliases for backward compatibility. - -inspur.ispim -~~~~~~~~~~~~ - -- Modify edit_smtp_com and add description information. - -microsoft.ad -~~~~~~~~~~~~ - -- Make ``name`` an optional parameter for the AD modules. Either ``name`` or ``identity`` needs to be set with their respective behaviours. If creating a new AD user and only ``identity`` is set, that will be the value used for the name of the object. -- Set minimum supported Ansible version to 2.14 to align with the versions still supported by Ansible. -- object_info - Add ActiveDirectory module import - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purefa_dns - Added facility to add a CA certifcate to management DNS and check peer. -- purefa_info - Add NSID value for NVMe namespace in `hosts` response -- purefa_info - Subset `pgroups` now also provides a new dict called `deleted_pgroups` -- purefa_offload - Remove `nfs` as an option when Purity//FA 6.6.0 or higher is detected -- purefa_snap - Add support for suffix on remote offload snapshots - -telekom_mms.icinga_director -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- Extended docs and examples for multiple assign_filter conditions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/227) - -theforeman.foreman -~~~~~~~~~~~~~~~~~~ - -- content_view_publish role - allow passing ``async`` and ``poll`` to the module (https://github.com/theforeman/foreman-ansible-modules/pull/1676) -- convert2rhel role - install ``convert2rhel`` from ``cdn-public.redhat.com``, dropping the requirement of a custom CA cert - -Breaking Changes / Porting Guide --------------------------------- - -Ansible-core -~~~~~~~~~~~~ - -- assert - Nested templating may result in an inability for the conditional to be evaluated. See the porting guide for more information. - -Security Fixes --------------- - -Ansible-core -~~~~~~~~~~~~ - -- templating - Address issues where internal templating can cause unsafe variables to lose their unsafe designation (CVE-2023-5764) - -Bugfixes --------- - -Ansible-core -~~~~~~~~~~~~ - -- Fix issue where an ``include_tasks`` handler in a role was not able to locate a file in ``tasks/`` when ``tasks_from`` was used as a role entry point and ``main.yml`` was not present (https://github.com/ansible/ansible/issues/82241) -- Plugin loader does not dedupe nor cache filter/test plugins by file basename, but full path name. -- Restoring the ability of filters/tests can have same file base name but different tests/filters defined inside. -- ansible-pull now will expand relative paths for the ``-d|--directory`` option is now expanded before use. -- ansible-pull will now correctly handle become and connection password file options for ansible-playbook. -- flush_handlers - properly handle a handler failure in a nested block when ``force_handlers`` is set (http://github.com/ansible/ansible/issues/81532) -- module no_log will no longer affect top level booleans, for example ``no_log_module_parameter='a'`` will no longer hide ``changed=False`` as a 'no log value' (matches 'a'). -- role params now have higher precedence than host facts again, matching documentation, this had unintentionally changed in 2.15. -- wait_for should not handle 'non mmapable files' again. - -ansible.windows -~~~~~~~~~~~~~~~ - -- Process.cs - Fix up the ``ProcessCreationFlags.CreateProtectedProcess`` typo in the enum name -- setup - Fix up typo ``collection -> collect`` when a timeout occurred during a fact subset -- win_acl - Fix broken path in case of volume junction -- win_service_info - Warn and not fail if ERROR_FILE_NOT_FOUND when trying to query a service - https://github.com/ansible-collections/ansible.windows/issues/556 -- win_updates - Fix up typo for Download progress event messages - https://github.com/ansible-collections/ansible.windows/issues/554 - -arista.eos -~~~~~~~~~~ - -- correct the reference of string attribute 'reference_bandwith'. - -cisco.ios -~~~~~~~~~ - -- Updated the ios_ping ping module to support size param. -- ios_acls - make sequence optional for rendering of standard acls. -- ios_bgp_global - Explicitly add neighbor address to every parser. -- ios_bgp_global - remote_as not mendatory for neighbors. -- ios_vrf - added MDT related keys - -cisco.iosxr -~~~~~~~~~~~ - -- Fix issue in gathered state of interfaces and l3_interfaces RMs(https://github.com/ansible-collections/cisco.iosxr/issues/452, https://github.com/ansible-collections/cisco.iosxr/issues/451) - -cisco.ise -~~~~~~~~~ - -- Added missing import re in endpoint module -- Updated to use ciscoisesdk v2.1.1 or newer fixing ciscoisesdk problem. - -cisco.meraki -~~~~~~~~~~~~ - -- Adding `network_clients_info` and `network_client_info`. -- Adding `platform_meraki.rst` to docs. -- Adding `product_types` for update request on networks. -- Idempotency bugs fixed in devices_switch_ports. -- Parameter`organization_id` change to `organizationId` organizations_claim. -- Parameter`organization_id` change to `organizationId` organizations_clone. -- Parameter`organization_id` change to `organizationId` organizations_inventory_claim. -- Parameter`organization_id` change to `organizationId` organizations_inventory_onboarding_cloud_monitoring_export_events. -- Parameter`organization_id` change to `organizationId` organizations_inventory_onboarding_cloud_monitoring_prepare. -- Parameter`organization_id` change to `organizationId` organizations_inventory_release. -- Parameter`organization_id` change to `organizationId` organizations_licenses_assign_seats. -- Parameter`organization_id` change to `organizationId` organizations_licenses_move. -- Parameter`organization_id` change to `organizationId` organizations_licenses_move_seats. -- Parameter`organization_id` change to `organizationId` organizations_licenses_renew_seats. -- Parameter`organization_id` change to `organizationId` organizations_licensing_coterm_licenses_move. -- Parameter`organization_id` change to `organizationId` organizations_networks_combine. -- Parameter`organization_id` change to `organizationId` organizations_switch_devices_clone. -- Parameter`organization_id` change to `organizationId` organizations_users. -- Removing logs in meraki.py. -- networks_syslog_servers is now just an Update action to API. - -community.crypto -~~~~~~~~~~~~~~~~ - -- acme_* modules - also retry requests in case of socket errors, bad status lines, and unknown connection errors; improve error messages in these cases (https://github.com/ansible-collections/community.crypto/issues/680). - -community.dns -~~~~~~~~~~~~~ - -- Update Public Suffix List. -- nameserver_record_info - fix crash when more than one record is retrieved (https://github.com/ansible-collections/community.dns/pull/172). - -community.general -~~~~~~~~~~~~~~~~~ - -- apt-rpm - the module did not upgrade packages if a newer version exists. Now the package will be reinstalled if the candidate is newer than the installed version (https://github.com/ansible-collections/community.general/issues/7414). -- cloudflare_dns - fix Cloudflare lookup of SHFP records (https://github.com/ansible-collections/community.general/issues/7652). -- interface_files - also consider ``address_family`` when changing ``option=method`` (https://github.com/ansible-collections/community.general/issues/7610, https://github.com/ansible-collections/community.general/pull/7612). -- irc - replace ``ssl.wrap_socket`` that was removed from Python 3.12 with code for creating a proper SSL context (https://github.com/ansible-collections/community.general/pull/7542). -- keycloak_* - fix Keycloak API client to quote ``/`` properly (https://github.com/ansible-collections/community.general/pull/7641). -- keycloak_authz_permission - resource payload variable for scope-based permission was constructed as a string, when it needs to be a list, even for a single item (https://github.com/ansible-collections/community.general/issues/7151). -- log_entries callback plugin - replace ``ssl.wrap_socket`` that was removed from Python 3.12 with code for creating a proper SSL context (https://github.com/ansible-collections/community.general/pull/7542). -- lvol - test for output messages in both ``stdout`` and ``stderr`` (https://github.com/ansible-collections/community.general/pull/7601, https://github.com/ansible-collections/community.general/issues/7182). -- onepassword lookup plugin - field and section titles are now case insensitive when using op CLI version two or later. This matches the behavior of version one (https://github.com/ansible-collections/community.general/pull/7564). -- redhat_subscription - use the D-Bus registration on RHEL 7 only on 7.4 and - greater; older versions of RHEL 7 do not have it - (https://github.com/ansible-collections/community.general/issues/7622, - https://github.com/ansible-collections/community.general/pull/7624). -- terraform - fix multiline string handling in complex variables (https://github.com/ansible-collections/community.general/pull/7535). - -community.vmware -~~~~~~~~~~~~~~~~ - -- vmware_vm_info - Fix an AttributeError when gathering network information (https://github.com/ansible-collections/community.vmware/pull/1919). - -community.windows -~~~~~~~~~~~~~~~~~ - -- Remove some code which is no longer valid for dotnet 5+ -- community.windows.win_psmodule_info - exception thrown when host has no Installed Module. Fix now checks that variable $installedModules is not null before calling the .Contains(..) function on it. -- win_rabbitmq_plugin - Avoid using ``Invoke-Expression`` when running external commands -- win_rds_rap - The module crashed when creating a RAP with Gateway Managed Computer Group (https://github.com/ansible-collections/community.windows/issues/184). - -community.zabbix -~~~~~~~~~~~~~~~~ - -- zabbix_inventory - fixed handeling of add_zabbix_groups option -- zabbix_template - fix template export when template's content has "error" word -- zabbix_web role - fix variable naming issues (undefined) to zabbix_web_version and zabbix_web_apt_repository - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- ome_inventory - The plugin returns 50 results when a group is specified. No results are shown when a group is not specified. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/575). - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- hcloud inventory - Ensure the API client use a new cache for every *cached session*. - -junipernetworks.junos -~~~~~~~~~~~~~~~~~~~~~ - -- fix to gather l2_interfaces facts with default port-mode access. - -microsoft.ad -~~~~~~~~~~~~ - -- debug_ldap_client - handle failures when attempting to get the krb5 context and default CCache rather than fail with a traceback - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_ems_destination - fix field error with `certificate.name` for ONTAP 9.11.1 or later in REST. -- na_ontap_vserver_peer - fix issue with peering multiple clusters with same vserver name in REST. - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purefa_cert - Fixed issue where parts of the subject where not included in the CSR if they did not exist in the currently used cert. -- purefa_dns - Fixed attribute error on deletion of management DNS -- purefa_pg - Allows a protection group to be correctly created when `target` is specified as well as other objects, such as `volumes` or `hosts` -- purefa_pgsched - Fixed issue with disabling schedules -- purefa_pgsnap - Fixed incorrect parameter name - -splunk.es -~~~~~~~~~ - -- Fixed argspec validation for plugins with empty task attributes when run with Ansible 2.9. - -theforeman.foreman -~~~~~~~~~~~~~~~~~~ - -- content_view_filter_rule - handle multiple rules for the same package but different architectures and versions correctly (https://bugzilla.redhat.com/show_bug.cgi?id=2189687) - -vultr.cloud -~~~~~~~~~~~ - -- instance - Fixed an issue detecting the instance state returned by the API (https://github.com/vultr/ansible-collection-vultr/pull/89). - -Known Issues ------------- - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- idrac_firmware - Issue(279282) - This module does not support firmware update using HTTP, HTTPS, and FTP shares with authentication on iDRAC8. -- idrac_network_attributes - Issue(279049) - If unsupported values are provided for the parameter ``ome_network_attributes``, then this module does not provide a correct error message. -- ome_device_network_services - Issue(212681) - The module does not provide a proper error message if unsupported values are provided for the following parameters- port_number, community_name, max_sessions, max_auth_retries, and idle_timeout. -- ome_device_power_settings - Issue(212679) - The module displays the following message if the value provided for the parameter ``power_cap`` is not within the supported range of 0 to 32767, ``Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI.`` -- ome_device_quick_deploy - Issue(275231) - This module does not deploy a new configuration to a slot that has disabled IPv6. -- ome_diagnostics - Issue(279193) - Export of SupportAssist collection logs to the share location fails on OME version 4.0.0. -- ome_smart_fabric_uplink - Issue(186024) - The module supported by OpenManage Enterprise Modular, however it does not allow the creation of multiple uplinks of the same name. If an uplink is created using the same name as an existing uplink, then the existing uplink is modified. - -New Plugins ------------ - -Filter -~~~~~~ - -- ansible.utils.fact_diff - Find the difference between currently set facts - -Lookup -~~~~~~ - -- community.general.onepassword_doc - Fetch documents stored in 1Password - -Test -~~~~ - -- community.general.fqdn_valid - Validates fully-qualified domain names against RFC 1123 - -New Modules ------------ - -cisco.ios -~~~~~~~~~ - -- cisco.ios.ios_evpn_evi - Resource module to configure L2VPN EVPN EVI. -- cisco.ios.ios_evpn_global - Resource module to configure L2VPN EVPN. -- cisco.ios.ios_vxlan_vtep - Resource module to configure VXLAN VTEP interface. - -community.general -~~~~~~~~~~~~~~~~~ - -- community.general.git_config_info - Read git configuration -- community.general.gitlab_issue - Create, update, or delete GitLab issues -- community.general.nomad_token - Manage Nomad ACL tokens - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purestorage.flasharray.purefa_hardware - Manage FlashArray Hardware Identification - -Unchanged Collections ---------------------- - -- amazon.aws (still version 7.0.0) -- ansible.netcommon (still version 5.3.0) -- ansible.posix (still version 1.5.4) -- azure.azcollection (still version 1.19.0) -- check_point.mgmt (still version 5.1.1) -- chocolatey.chocolatey (still version 1.5.1) -- cisco.aci (still version 2.8.0) -- cisco.asa (still version 4.0.3) -- cisco.intersight (still version 2.0.3) -- cisco.mso (still version 2.5.0) -- cisco.ucs (still version 1.10.0) -- cloud.common (still version 2.1.4) -- cloudscale_ch.cloud (still version 2.3.1) -- community.aws (still version 7.0.0) -- community.azure (still version 2.0.0) -- community.ciscosmb (still version 1.0.7) -- community.digitalocean (still version 1.24.0) -- community.docker (still version 3.4.11) -- community.grafana (still version 1.6.1) -- community.hashi_vault (still version 6.0.0) -- community.hrobot (still version 1.8.2) -- community.libvirt (still version 1.3.0) -- community.mongodb (still version 1.6.3) -- community.mysql (still version 3.8.0) -- community.network (still version 5.0.2) -- community.okd (still version 2.3.0) -- community.postgresql (still version 3.2.0) -- community.proxysql (still version 1.5.1) -- community.rabbitmq (still version 1.2.3) -- community.sap (still version 2.0.0) -- community.sap_libs (still version 1.4.1) -- community.sops (still version 1.6.7) -- containers.podman (still version 1.11.0) -- cyberark.conjur (still version 1.2.2) -- cyberark.pas (still version 1.0.23) -- dellemc.enterprise_sonic (still version 2.2.0) -- dellemc.unity (still version 1.7.1) -- fortinet.fortimanager (still version 2.3.0) -- fortinet.fortios (still version 2.3.4) -- frr.frr (still version 2.0.2) -- gluster.gluster (still version 1.0.2) -- grafana.grafana (still version 2.2.3) -- hpe.nimble (still version 1.1.4) -- ibm.qradar (still version 2.1.0) -- ibm.spectrum_virtualize (still version 2.0.0) -- ibm.storage_virtualize (still version 2.1.0) -- infinidat.infinibox (still version 1.3.12) -- infoblox.nios_modules (still version 1.5.0) -- inspur.sm (still version 2.3.0) -- kubernetes.core (still version 2.4.0) -- lowlydba.sqlserver (still version 2.2.2) -- netapp.aws (still version 21.7.1) -- netapp.azure (still version 21.10.1) -- netapp.cloudmanager (still version 21.22.1) -- netapp.elementsw (still version 21.7.0) -- netapp.storagegrid (still version 21.11.1) -- netapp.um_info (still version 21.8.1) -- netapp_eseries.santricity (still version 1.4.0) -- netbox.netbox (still version 3.15.0) -- ngine_io.cloudstack (still version 2.3.0) -- ngine_io.exoscale (still version 1.1.0) -- openvswitch.openvswitch (still version 2.1.1) -- ovirt.ovirt (still version 3.2.0) -- purestorage.flashblade (still version 1.14.0) -- purestorage.fusion (still version 1.6.0) -- sensu.sensu_go (still version 1.14.0) -- t_systems_mms.icinga_director (still version 2.0.1) -- vmware.vmware_rest (still version 2.3.1) -- vyos.vyos (still version 4.1.0) -- wti.remote (still version 1.0.5) - -v9.0.1 -====== - -.. contents:: - :local: - :depth: 2 - -Release Summary ---------------- - -Release Date: 2023-11-21 - -`Porting Guide `_ - -Ansible-core ------------- - -Ansible 9.0.1 contains ansible-core version 2.16.0. -This is the same version of ansible-core as in the previous Ansible release. - -Bugfixes --------- - -- Fix the Python package metadata in ``setup.cfg`` to require Python ``>=3.10`` to ensure that pip can properly install ``ansible`` on older Python versions. - -Unchanged Collections ---------------------- - -- amazon.aws (still version 7.0.0) -- ansible.netcommon (still version 5.3.0) -- ansible.posix (still version 1.5.4) -- ansible.utils (still version 2.11.0) -- ansible.windows (still version 2.1.0) -- arista.eos (still version 6.2.1) -- awx.awx (still version 23.3.1) -- azure.azcollection (still version 1.19.0) -- check_point.mgmt (still version 5.1.1) -- chocolatey.chocolatey (still version 1.5.1) -- cisco.aci (still version 2.8.0) -- cisco.asa (still version 4.0.3) -- cisco.dnac (still version 6.7.6) -- cisco.intersight (still version 2.0.3) -- cisco.ios (still version 5.2.0) -- cisco.iosxr (still version 6.1.0) -- cisco.ise (still version 2.5.16) -- cisco.meraki (still version 2.16.14) -- cisco.mso (still version 2.5.0) -- cisco.nxos (still version 5.2.1) -- cisco.ucs (still version 1.10.0) -- cloud.common (still version 2.1.4) -- cloudscale_ch.cloud (still version 2.3.1) -- community.aws (still version 7.0.0) -- community.azure (still version 2.0.0) -- community.ciscosmb (still version 1.0.7) -- community.crypto (still version 2.16.0) -- community.digitalocean (still version 1.24.0) -- community.dns (still version 2.6.3) -- community.docker (still version 3.4.11) -- community.general (still version 8.0.2) -- community.grafana (still version 1.6.1) -- community.hashi_vault (still version 6.0.0) -- community.hrobot (still version 1.8.2) -- community.libvirt (still version 1.3.0) -- community.mongodb (still version 1.6.3) -- community.mysql (still version 3.8.0) -- community.network (still version 5.0.2) -- community.okd (still version 2.3.0) -- community.postgresql (still version 3.2.0) -- community.proxysql (still version 1.5.1) -- community.rabbitmq (still version 1.2.3) -- community.routeros (still version 2.10.0) -- community.sap (still version 2.0.0) -- community.sap_libs (still version 1.4.1) -- community.sops (still version 1.6.7) -- community.vmware (still version 4.0.0) -- community.windows (still version 2.0.0) -- community.zabbix (still version 2.1.0) -- containers.podman (still version 1.11.0) -- cyberark.conjur (still version 1.2.2) -- cyberark.pas (still version 1.0.23) -- dellemc.enterprise_sonic (still version 2.2.0) -- dellemc.openmanage (still version 8.4.0) -- dellemc.powerflex (still version 2.0.1) -- dellemc.unity (still version 1.7.1) -- f5networks.f5_modules (still version 1.27.0) -- fortinet.fortimanager (still version 2.3.0) -- fortinet.fortios (still version 2.3.4) -- frr.frr (still version 2.0.2) -- gluster.gluster (still version 1.0.2) -- google.cloud (still version 1.2.0) -- grafana.grafana (still version 2.2.3) -- hetzner.hcloud (still version 2.3.0) -- hpe.nimble (still version 1.1.4) -- ibm.qradar (still version 2.1.0) -- ibm.spectrum_virtualize (still version 2.0.0) -- ibm.storage_virtualize (still version 2.1.0) -- infinidat.infinibox (still version 1.3.12) -- infoblox.nios_modules (still version 1.5.0) -- inspur.ispim (still version 2.1.0) -- inspur.sm (still version 2.3.0) -- junipernetworks.junos (still version 5.3.0) -- kubernetes.core (still version 2.4.0) -- lowlydba.sqlserver (still version 2.2.2) -- microsoft.ad (still version 1.3.0) -- netapp.aws (still version 21.7.1) -- netapp.azure (still version 21.10.1) -- netapp.cloudmanager (still version 21.22.1) -- netapp.elementsw (still version 21.7.0) -- netapp.ontap (still version 22.8.2) -- netapp.storagegrid (still version 21.11.1) -- netapp.um_info (still version 21.8.1) -- netapp_eseries.santricity (still version 1.4.0) -- netbox.netbox (still version 3.15.0) -- ngine_io.cloudstack (still version 2.3.0) -- ngine_io.exoscale (still version 1.1.0) -- openstack.cloud (still version 2.1.0) -- openvswitch.openvswitch (still version 2.1.1) -- ovirt.ovirt (still version 3.2.0) -- purestorage.flasharray (still version 1.22.0) -- purestorage.flashblade (still version 1.14.0) -- purestorage.fusion (still version 1.6.0) -- sensu.sensu_go (still version 1.14.0) -- splunk.es (still version 2.1.0) -- t_systems_mms.icinga_director (still version 2.0.1) -- telekom_mms.icinga_director (still version 1.34.1) -- theforeman.foreman (still version 3.14.0) -- vmware.vmware_rest (still version 2.3.1) -- vultr.cloud (still version 1.10.0) -- vyos.vyos (still version 4.1.0) -- wti.remote (still version 1.0.5) - -v9.0.0 -====== - -.. contents:: - :local: - :depth: 2 - -Release Summary ---------------- - -[YANKED] Release Date: 2023-11-21 `Porting Guide `_ - -Removed Collections -------------------- - -- cisco.nso (previously included version: 1.0.3) -- community.fortios (previously included version: 1.0.0) -- community.google (previously included version: 1.0.0) -- community.skydive (previously included version: 1.0.0) -- ngine_io.vultr (previously included version: 1.1.3) -- servicenow.servicenow (previously included version: 1.0.6) - -Added Collections ------------------ - -- ibm.storage_virtualize (version 2.1.0) -- telekom_mms.icinga_director (version 1.34.1) - -Ansible-core ------------- - -Ansible 9.0.0 contains ansible-core version 2.16.0. -This is a newer version than version 2.15.0 contained in the previous Ansible release. - -The changes are reported in the combined changelog below. - -Included Collections --------------------- - -If not mentioned explicitly, the changes are reported in the combined changelog below. - -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Collection | Ansible 8.0.0 | Ansible 9.0.0 | Notes | -+===============================+===============+===============+================================================================================================================================================================================================================+ -| amazon.aws | 6.0.1 | 7.0.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ansible.netcommon | 5.1.1 | 5.3.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ansible.utils | 2.10.3 | 2.11.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ansible.windows | 1.14.0 | 2.1.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| arista.eos | 6.0.1 | 6.2.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| awx.awx | 22.2.0 | 23.3.1 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| azure.azcollection | 1.15.0 | 1.19.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| check_point.mgmt | 5.0.0 | 5.1.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| chocolatey.chocolatey | 1.4.0 | 1.5.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.aci | 2.6.0 | 2.8.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.asa | 4.0.0 | 4.0.3 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.dnac | 6.7.2 | 6.7.6 | The collection did not have a changelog in this version. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.intersight | 1.0.27 | 2.0.3 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ios | 4.5.0 | 5.2.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.iosxr | 5.0.2 | 6.1.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ise | 2.5.12 | 2.5.16 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.meraki | 2.15.1 | 2.16.14 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.mso | 2.4.0 | 2.5.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.nxos | 4.3.0 | 5.2.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cisco.ucs | 1.8.0 | 1.10.0 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cloud.common | 2.1.3 | 2.1.4 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cloudscale_ch.cloud | 2.2.4 | 2.3.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.aws | 6.0.0 | 7.0.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.ciscosmb | 1.0.5 | 1.0.7 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.crypto | 2.13.1 | 2.16.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.digitalocean | 1.23.0 | 1.24.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.dns | 2.5.4 | 2.6.3 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.docker | 3.4.6 | 3.4.11 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.general | 7.0.1 | 8.0.2 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.grafana | 1.5.4 | 1.6.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.hashi_vault | 5.0.0 | 6.0.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.hrobot | 1.8.0 | 1.8.2 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.libvirt | 1.2.0 | 1.3.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.mongodb | 1.5.2 | 1.6.3 | There are no changes recorded in the changelog. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.mysql | 3.7.1 | 3.8.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.network | 5.0.0 | 5.0.2 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.postgresql | 2.4.1 | 3.2.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.routeros | 2.8.0 | 2.10.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.sap | 1.0.0 | 2.0.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.sops | 1.6.1 | 1.6.7 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.vmware | 3.6.0 | 4.0.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.windows | 1.13.0 | 2.0.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.zabbix | 2.0.0 | 2.1.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| containers.podman | 1.10.1 | 1.11.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cyberark.conjur | 1.2.0 | 1.2.2 | You can find the collection's changelog at `https://github.com/cyberark/ansible-conjur-collection/blob/master/CHANGELOG.md `_. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cyberark.pas | 1.0.19 | 1.0.23 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.enterprise_sonic | 2.0.0 | 2.2.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.openmanage | 7.5.0 | 8.4.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.powerflex | 1.6.0 | 2.0.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.unity | 1.6.0 | 1.7.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| f5networks.f5_modules | 1.24.0 | 1.27.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| fortinet.fortimanager | 2.1.7 | 2.3.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| fortinet.fortios | 2.2.3 | 2.3.4 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| google.cloud | 1.1.3 | 1.2.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| grafana.grafana | 2.0.0 | 2.2.3 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| hetzner.hcloud | 1.11.0 | 2.3.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ibm.spectrum_virtualize | 1.12.0 | 2.0.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ibm.storage_virtualize | | 2.1.0 | The collection was added to Ansible | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| inspur.ispim | 1.3.0 | 2.1.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| junipernetworks.junos | 5.1.0 | 5.3.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| lowlydba.sqlserver | 2.0.0 | 2.2.2 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| microsoft.ad | 1.1.0 | 1.3.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| netapp.aws | 21.7.0 | 21.7.1 | The collection did not have a changelog in this version. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| netapp.azure | 21.10.0 | 21.10.1 | The collection did not have a changelog in this version. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| netapp.cloudmanager | 21.22.0 | 21.22.1 | The collection did not have a changelog in this version. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| netapp.ontap | 22.6.0 | 22.8.2 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| netapp.um_info | 21.8.0 | 21.8.1 | The collection did not have a changelog in this version. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| netbox.netbox | 3.13.0 | 3.15.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ngine_io.exoscale | 1.0.0 | 1.1.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ovirt.ovirt | 3.1.2 | 3.2.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flasharray | 1.18.0 | 1.22.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.flashblade | 1.11.0 | 1.14.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| purestorage.fusion | 1.4.2 | 1.6.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| sensu.sensu_go | 1.13.2 | 1.14.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| t_systems_mms.icinga_director | 1.32.2 | 2.0.1 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| telekom_mms.icinga_director | | 1.34.1 | The collection was added to Ansible | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| theforeman.foreman | 3.10.0 | 3.14.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| vultr.cloud | 1.7.1 | 1.10.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| vyos.vyos | 4.0.2 | 4.1.0 | | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| wti.remote | 1.0.4 | 1.0.5 | Unfortunately, this collection does not provide changelog data in a format that can be processed by the changelog generator. | -+-------------------------------+---------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Major Changes -------------- - -amazon.aws -~~~~~~~~~~ - -- 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``. -- 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/amazon.aws/pull/1755). -- 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/amazon.aws/pull/1762). -- 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/amazon.aws/pull/1761). -- 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/amazon.aws/pull/1760). -- 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/amazon.aws/pull/1760). -- 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``. - -chocolatey.chocolatey -~~~~~~~~~~~~~~~~~~~~~ - -- win_chocolatey - add options for specifying checksums -- win_chocolatey_facts - add filter / gather_subset option - -cisco.ios -~~~~~~~~~ - -- This release removes a previously deprecated modules, and a few attributes from this collection. Refer to **Removed Features** section for details. - -cisco.nxos -~~~~~~~~~~ - -- Refer to **Removed Features** section for details. -- This release removes four of the previously deprecated modules from this collection. - -cloudscale_ch.cloud -~~~~~~~~~~~~~~~~~~~ - -- Bump minimum required Ansible version to 2.13.0 - -community.mysql -~~~~~~~~~~~~~~~ - -- The community.mysql collection no longer supports ``ansible-core 2.12`` and ``ansible-core 2.13``. While we take no active measures to prevent usage and there are no plans to introduce incompatible code to the modules, we will stop testing those versions. Both are or will soon be End of Life and if you are still using them, you should consider upgrading to the ``latest Ansible / ansible-core 2.15 or later`` as soon as possible (https://github.com/ansible-collections/community.mysql/pull/574). -- mysql_role - the ``column_case_sensitive`` argument's default value will be changed to ``true`` in community.mysql 4.0.0. If your playbook expected the column to be automatically uppercased for your roles privileges, you should set this to false explicitly (https://github.com/ansible-collections/community.mysql/issues/578). -- mysql_user - the ``column_case_sensitive`` argument's default value will be changed to ``true`` in community.mysql 4.0.0. If your playbook expected the column to be automatically uppercased for your users privileges, you should set this to false explicitly (https://github.com/ansible-collections/community.mysql/issues/577). - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- postgres modules - the minimum version of psycopg2 library the collection supports is 2.5.1 (https://github.com/ansible-collections/community.postgresql/pull/556). -- postgresql_pg_hba - remove the deprecated ``order`` argument. The sortorder ``sdu`` is hardcoded (https://github.com/ansible-collections/community.postgresql/pull/496). -- postgresql_privs - remove the deprecated ``usage_on_types`` argument. Use the ``type`` option of the ``type`` argument to explicitly manipulate privileges on PG types (https://github.com/ansible-collections/community.postgresql/issues/208). -- postgresql_query - remove the deprecated ``path_to_script`` and ``as_single_query`` arguments. Use the ``postgresql_script`` module to run queries from scripts (https://github.com/ansible-collections/community.postgresql/issues/189). -- postgresql_user - move the deprecated ``privs`` argument removal to community.postgresql 4.0.0 (https://github.com/ansible-collections/community.postgresql/issues/493). -- postgresql_user - remove the deprecated ``groups`` argument. Use the ``postgresql_membership`` module instead (https://github.com/ansible-collections/community.postgresql/issues/300). - -community.sap -~~~~~~~~~~~~~ - -- all modules - everything is now a redirect to the new collection community.sap_libs - -community.vmware -~~~~~~~~~~~~~~~~ - -- vmware_vasa - added a new module to register/unregister a VASA provider -- vmware_vasa_info - added a new module to gather the information about existing VASA provider(s) - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- Support all FortiManager versions in 6.2, 6.4, 7.0, 7.2 and 7.4. 139 new modules. -- Support token based authentication. - -fortinet.fortios -~~~~~~~~~~~~~~~~ - -- Add new fortios version 7.4.1. -- Add readthedocs.yaml file. -- Format the contents in the changelog.yml file. -- Improve the `no_log` feature in some modules; -- Improve the document for adding notes and examples in Q&A for modules using Integer number as the mkey. -- Improve the documentation and example for `seq_num` in `fortios_router_static`; -- Improve the documentation for `member_path` in all the modules; -- Support new FOS versions. -- Update Ansible version from 2.9 to 2.14. -- Update Q&A regarding setting up FortiToken multi-factor authentication; -- Update Q&A with a resolution for Ansible Always Sending GET/PUT Requests as POST Requests. -- Update the requirement.txt file to specify the sphinx_rtd_theme==1.3.0 -- update the required Ansible version to 2.14.0 in the runtime.yml file. - -grafana.grafana -~~~~~~~~~~~~~~~ - -- Addition of Grafana Server role by @gardar -- Configurable agent user groups by @NormanJS -- Grafana Plugins support on-prem Grafana installation by @ishanjainn -- Updated Service for flow mode by @bentonam - -Minor Changes -------------- - -- Move setuptools configuration into the declarative ``setup.cfg`` format. ``ansible`` sdists still contain a stub ``setup.py`` file, but we recommend that users move to tools like pip and build and the PEP 517 interface instead of setuptools' deprecated ``setup.py`` interface (https://github.com/ansible-community/antsibull/pull/530). - -Ansible-core -~~~~~~~~~~~~ - -- Add Python type hints to the Display class (https://github.com/ansible/ansible/issues/80841) -- Add ``GALAXY_COLLECTIONS_PATH_WARNING`` option to disable the warning given by ``ansible-galaxy collection install`` when installing a collection to a path that isn't in the configured collection paths. -- Add ``python3.12`` to the default ``INTERPRETER_PYTHON_FALLBACK`` list. -- Add ``utcfromtimestamp`` and ``utcnow`` to ``ansible.module_utils.compat.datetime`` to return fixed offset datetime objects. -- Add a general ``GALAXY_SERVER_TIMEOUT`` config option for distribution servers (https://github.com/ansible/ansible/issues/79833). -- Added Python type annotation to connection plugins -- CLI argument parsing - Automatically prepend to the help of CLI arguments that support being specified multiple times. (https://github.com/ansible/ansible/issues/22396) -- DEFAULT_TRANSPORT now defaults to 'ssh', the old 'smart' option is being deprecated as versions of OpenSSH without control persist are basically not present anymore. -- Documentation for set filters ``intersect``, ``difference``, ``symmetric_difference`` and ``union`` now states that the returned list items are in arbitrary order. -- Record ``removal_date`` in runtime metadata as a string instead of a date. -- Remove the ``CleansingNodeVisitor`` class and its usage due to the templating changes that made it superfluous. Also simplify the ``Conditional`` class. -- Removed ``exclude`` and ``recursive-exclude`` commands for generated files from the ``MANIFEST.in`` file. These excludes were unnecessary since releases are expected to be built with a clean worktree. -- Removed ``exclude`` commands for sanity test files from the ``MANIFEST.in`` file. These tests were previously excluded because they did not pass when run from an sdist. However, sanity tests are not expected to pass from an sdist, so excluding some (but not all) of the failing tests makes little sense. -- Removed redundant ``include`` commands from the ``MANIFEST.in`` file. These includes either duplicated default behavior or another command. -- The ``ansible-core`` sdist no longer contains pre-generated man pages. Instead, a ``packaging/cli-doc/build.py`` script is included in the sdist. This script can generate man pages and standalone RST documentation for ``ansible-core`` CLI programs. -- The ``docs`` and ``examples`` directories are no longer included in the ``ansible-core`` sdist. These directories have been moved to the https://github.com/ansible/ansible-documentation repository. -- The minimum required ``setuptools`` version is now 66.1.0, as it is the oldest version to support Python 3.12. -- Update ``ansible_service_mgr`` fact to include init system for SMGL OS family -- Use ``ansible.module_utils.common.text.converters`` instead of ``ansible.module_utils._text``. -- Use ``importlib.resources.abc.TraversableResources`` instead of deprecated ``importlib.abc.TraversableResources`` where available (https:/github.com/ansible/ansible/pull/81082). -- Use ``include`` where ``recursive-include`` is unnecessary in the ``MANIFEST.in`` file. -- Use ``package_data`` instead of ``include_package_data`` for ``setup.cfg`` to avoid ``setuptools`` warnings. -- Utilize gpg check provided internally by the ``transaction.run`` method as oppose to calling it manually. -- ``Templar`` - do not add the ``dict`` constructor to ``globals`` as all required Jinja2 versions already do so -- ansible-doc - allow to filter listing of collections and metadata dump by more than one collection (https://github.com/ansible/ansible/pull/81450). -- ansible-galaxy - Add a plural option to improve ignoring multiple signature error status codes when installing or verifying collections. A space-separated list of error codes can follow --ignore-signature-status-codes in addition to specifying --ignore-signature-status-code multiple times (for example, ``--ignore-signature-status-codes NO_PUBKEY UNEXPECTED``). -- ansible-galaxy - Remove internal configuration argument ``v3`` (https://github.com/ansible/ansible/pull/80721) -- ansible-galaxy - add note to the collection dependency resolver error message about pre-releases if ``--pre`` was not provided (https://github.com/ansible/ansible/issues/80048). -- ansible-galaxy - used to crash out with a "Errno 20 Not a directory" error when extracting files from a role when hitting a file with an illegal name (https://github.com/ansible/ansible/pull/81553). Now it gives a warning identifying the culprit file and the rule violation (e.g., ``my$class.jar`` has a ``$`` in the name) before crashing out, giving the user a chance to remove the invalid file and try again. (https://github.com/ansible/ansible/pull/81555). -- ansible-test - Add Alpine 3.18 to remotes -- ansible-test - Add Fedora 38 container. -- ansible-test - Add Fedora 38 remote. -- ansible-test - Add FreeBSD 13.2 remote. -- ansible-test - Add new pylint checker for new ``# deprecated:`` comments within code to trigger errors when time to remove code that has no user facing deprecation message. Only supported in ansible-core, not collections. -- ansible-test - Add support for RHEL 8.8 remotes. -- ansible-test - Add support for RHEL 9.2 remotes. -- ansible-test - Add support for testing with Python 3.12. -- ansible-test - Allow float values for the ``--timeout`` option to the ``env`` command. This simplifies testing. -- ansible-test - Enable ``thread`` code coverage in addition to the existing ``multiprocessing`` coverage. -- ansible-test - Make Python 3.12 the default version used in the ``base`` and ``default`` containers. -- ansible-test - RHEL 8.8 provisioning can now be used with the ``--python 3.11`` option. -- ansible-test - RHEL 9.2 provisioning can now be used with the ``--python 3.11`` option. -- ansible-test - Refactored ``env`` command logic and timeout handling. -- ansible-test - Remove Fedora 37 remote support. -- ansible-test - Remove Fedora 37 test container. -- ansible-test - Remove Python 3.8 and 3.9 from RHEL 8.8. -- ansible-test - Remove obsolete embedded script for configuring WinRM on Windows remotes. -- ansible-test - Removed Ubuntu 20.04 LTS image from the `--remote` option. -- ansible-test - Removed `freebsd/12.4` remote. -- ansible-test - Removed `freebsd/13.1` remote. -- ansible-test - Removed test remotes: rhel/8.7, rhel/9.1 -- ansible-test - Removed the deprecated ``--docker-no-pull`` option. -- ansible-test - Removed the deprecated ``--no-pip-check`` option. -- ansible-test - Removed the deprecated ``foreman`` test plugin. -- ansible-test - Removed the deprecated ``govcsim`` support from the ``vcenter`` test plugin. -- ansible-test - Replace the ``pytest-forked`` pytest plugin with a custom plugin. -- ansible-test - The ``no-get-exception`` sanity test is now limited to plugins in collections. Previously any Python file in a collection was checked for ``get_exception`` usage. -- ansible-test - The ``replace-urlopen`` sanity test is now limited to plugins in collections. Previously any Python file in a collection was checked for ``urlopen`` usage. -- ansible-test - The ``use-compat-six`` sanity test is now limited to plugins in collections. Previously any Python file in a collection was checked for ``six`` usage. -- ansible-test - The openSUSE test container has been updated to openSUSE Leap 15.5. -- ansible-test - Update pip to ``23.1.2`` and setuptools to ``67.7.2``. -- ansible-test - Update the ``default`` containers. -- ansible-test - Update the ``nios-test-container`` to version 2.0.0, which supports API version 2.9. -- ansible-test - Update the logic used to detect when ``ansible-test`` is running from source. -- ansible-test - Updated the CloudStack test container to version 1.6.1. -- ansible-test - Updated the distro test containers to version 6.3.0 to include coverage 7.3.2 for Python 3.8+. The alpine3 container is now based on 3.18 instead of 3.17 and includes Python 3.11 instead of Python 3.10. -- ansible-test - Use ``datetime.datetime.now`` with ``tz`` specified instead of ``datetime.datetime.utcnow``. -- ansible-test - Use a context manager to perform cleanup at exit instead of using the built-in ``atexit`` module. -- ansible-test - When invoking ``sleep`` in containers during container setup, the ``env`` command is used to avoid invoking the shell builtin, if present. -- ansible-test - remove Alpine 3.17 from remotes -- ansible-test — Python 3.8–3.12 will use ``coverage`` v7.3.2. -- ansible-test — ``coverage`` v6.5.0 is to be used only under Python 3.7. -- ansible-vault create: Now raises an error when opening the editor without tty. The flag --skip-tty-check restores previous behaviour. -- ansible_user_module - tweaked macos user defaults to reflect expected defaults (https://github.com/ansible/ansible/issues/44316) -- apt - return calculated diff while running apt clean operation. -- blockinfile - add append_newline and prepend_newline options (https://github.com/ansible/ansible/issues/80835). -- cli - Added short option '-J' for asking for vault password (https://github.com/ansible/ansible/issues/80523). -- command - Add option ``expand_argument_vars`` to disable argument expansion and use literal values - https://github.com/ansible/ansible/issues/54162 -- config lookup new option show_origin to also return the origin of a configuration value. -- display methods for warning and deprecation are now proxied to main process when issued from a fork. This allows for the deduplication of warnings and deprecations to work globally. -- dnf5 - enable environment groups installation testing in CI as its support was added. -- dnf5 - enable now implemented ``cacheonly`` functionality -- executor now skips persistent connection when it detects an action that does not require a connection. -- find module - Add ability to filter based on modes -- gather_facts now will use gather_timeout setting to limit parallel execution of modules that do not themselves use gather_timeout. -- group - remove extraneous warning shown when user does not exist (https://github.com/ansible/ansible/issues/77049). -- include_vars - os.walk now follows symbolic links when traversing directories (https://github.com/ansible/ansible/pull/80460) -- module compression is now sourced directly via config, bypassing play_context possibly stale values. -- reboot - show last error message in verbose logs (https://github.com/ansible/ansible/issues/81574). -- service_facts now returns more info for rcctl managed systesm (OpenBSD). -- tasks - the ``retries`` keyword can be specified without ``until`` in which case the task is retried until it succeeds but at most ``retries`` times (https://github.com/ansible/ansible/issues/20802) -- user - add new option ``password_expire_warn`` (supported on Linux only) to set the number of days of warning before a password change is required (https://github.com/ansible/ansible/issues/79882). -- yum_repository - Align module documentation with parameters - -amazon.aws -~~~~~~~~~~ - -- amazon.aws collection - apply isort code formatting to ensure consistent formatting of code (https://github.com/ansible-collections/amazon.aws/pull/1771). -- backup_selection - add validation and documentation for all conditions suboptions (https://github.com/ansible-collections/amazon.aws/pull/1633). -- cloudformation - Add support for ``disable_rollback`` to update stack operation (https://github.com/ansible-collections/amazon.aws/issues/1681). -- ec2_ami - add support for ``org_arns`` and ``org_unit_arns`` in launch_permissions (https://github.com/ansible-collections/amazon.aws/pull/1690). -- ec2_instance - add support for additional ``placement`` options and ``license_specifications`` in run instance spec (https://github.com/ansible-collections/amazon.aws/issues/1824). -- ec2_instance - refactored ARN validation handling (https://github.com/ansible-collections/amazon.aws/pull/1619). -- ec2_instance_info - add new parameter ``include_attributes`` to describe instance attributes (https://github.com/ansible-collections/amazon.aws/pull/1577). -- ec2_key - add support for new parameter ``file_name`` to save private key in when new key is created by AWS. When this option is provided the generated private key will be removed from the module return (https://github.com/ansible-collections/amazon.aws/pull/1704). -- ec2_metadata_facts - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1802). -- ec2_snapshot - Add support for modifying createVolumePermission (https://github.com/ansible-collections/amazon.aws/pull/1464). -- ec2_snapshot_info - Add createVolumePermission to output result (https://github.com/ansible-collections/amazon.aws/pull/1464). -- ec2_vpc_igw - Add ability to attach/detach VPC to/from internet gateway (https://github.com/ansible-collections/amazon.aws/pull/1786). -- ec2_vpc_igw - Add ability to change VPC attached to internet gateway (https://github.com/ansible-collections/amazon.aws/pull/1786). -- ec2_vpc_igw - Add ability to create an internet gateway without attaching a VPC (https://github.com/ansible-collections/amazon.aws/pull/1786). -- ec2_vpc_igw - Add ability to delete a vpc internet gateway using the id of the gateway (https://github.com/ansible-collections/amazon.aws/pull/1786). -- elb_application_lb_info - add new parameters ``include_attributes``, ``include_listeners`` and ``include_listener_rules`` to optionally speed up module by fetching less information (https://github.com/ansible-collections/amazon.aws/pull/1778). -- elb_application_lb_info - drop redundant ``describe_load_balancers`` call fetching ``ip_address_type`` (https://github.com/ansible-collections/amazon.aws/pull/1768). -- iam_user - refactored ARN validation handling (https://github.com/ansible-collections/amazon.aws/pull/1619). -- module_utils.arn - add ``resource_id`` and ``resource_type`` to ``parse_aws_arn`` return values (https://github.com/ansible-collections/amazon.aws/pull/1619). -- module_utils.arn - added ``validate_aws_arn`` function to handle common pattern matching for ARNs (https://github.com/ansible-collections/amazon.aws/pull/1619). -- module_utils.botocore - migrate from vendored copy of LooseVersion to packaging.version.Version (https://github.com/ansible-collections/amazon.aws/pull/1587). -- rds_cluster - Add support for removing cluster from global db (https://github.com/ansible-collections/amazon.aws/pull/1705). -- rds_cluster - add support for another ``state`` choice called ``started``. This starts the rds cluster (https://github.com/ansible-collections/amazon.aws/pull/1647/files). -- rds_cluster - add support for another ``state`` choice called ``stopped``. This stops the rds cluster (https://github.com/ansible-collections/amazon.aws/pull/1647/files). -- route53 - add a ``wait_id`` return value when a change is done (https://github.com/ansible-collections/amazon.aws/pull/1683). -- route53_health_check - add support for a string list parameter called ``child_health_checks`` to specify health checks that must be healthy for the calculated health check (https://github.com/ansible-collections/amazon.aws/pull/1631). -- route53_health_check - add support for an integer parameter called ``health_threshold`` to specify the minimum number of healthy child health checks that must be healthy for the calculated health check (https://github.com/ansible-collections/amazon.aws/pull/1631). -- route53_health_check - add support for another ``type`` choice called ``CALCULATED`` (https://github.com/ansible-collections/amazon.aws/pull/1631). -- s3_object - Allow recursive copy of objects in S3 bucket (https://github.com/ansible-collections/amazon.aws/issues/1379). -- s3_object - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1802). - -ansible.netcommon -~~~~~~~~~~~~~~~~~ - -- Add a new cliconf plugin ``default`` that can be used when no cliconf plugin is found for a given network_os. This plugin only supports ``get()``. (https://github.com/ansible-collections/ansible.netcommon/pull/569) -- Add new module cli_backup that exclusively handles configuration backup. -- httpapi - Add additional option ``ca_path``, ``client_cert``, ``client_key``, and ``http_agent`` that are available in open_url but not to httpapi. (https://github.com/ansible-collections/ansible.netcommon/issues/528) -- telnet - add crlf option to send CRLF instead of just LF (https://github.com/ansible-collections/ansible.netcommon/pull/440). - -ansible.utils -~~~~~~~~~~~~~ - -- 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) - -ansible.windows -~~~~~~~~~~~~~~~ - -- win_certificate_store - the private key check, when exporting to pkcs12, has been modified to handle the case where the ``PrivateKey`` property is null despite it being there -- win_find - Added ``depth`` option to control how deep to go when scanning into the target path - https://github.com/ansible-collections/ansible.windows/issues/335 -- win_updates - Avoid using a scheduled task to spawn the updates background job when running as become. This provides an alternative method available to users in case the task scheduler does not work on their system - https://github.com/ansible-collections/ansible.windows/issues/543 - -arista.eos -~~~~~~~~~~ - -- Add support for overridden operation in bgp_global resource module. -- arista_config - Relax restrictions on I(src) parameter so it can be used more like I(lines). - -check_point.mgmt -~~~~~~~~~~~~~~~~ - -- cp_mgmt_vpn_community_star - new fields added. -- show command modules - no longer return result of changed=True. - -chocolatey.chocolatey -~~~~~~~~~~~~~~~~~~~~~ - -- All modules - Ensure modules are compatible with both Chocolatey CLI v2.x and v1.x -- win_chocolatey - Improve error messages when installation of Chocolatey CLI v2.x fails due to unmet .NET Framework 4.8 dependency on client - -cisco.aci -~~~~~~~~~ - -- Add 8.0 option for dvs_version attribute in aci_vmm_controller -- Add ACI HTTPAPI plugin with multi host support (#114) -- Add Match Rules for aci_route_control_profile modules -- Add OSPF parameters to aci_l3out module and create the associated test case. -- Add aci_access_span_src_group modules for access span source group support -- Add aci_access_span_src_group_src module for access span source support -- Add aci_access_span_src_group_src_path module for access span source path support -- Add aci_bgp_timers_policy and aci_bgp_best_path_policy modules -- Add aci_epg_subnet module (#424) -- Add aci_fabric_interface_policy_group module -- Add aci_fabric_span_dst_group module for fabric span destination group support -- Add aci_fabric_span_src_group module for fabric span source group support -- Add aci_fabric_span_src_group_src module for fabric span source support -- Add aci_fabric_span_src_group_src_node module for fabric span source node support -- Add aci_fabric_span_src_group_src_path module for fabric span source path support -- Add aci_file_remote_path module (#379) -- Add aci_interface_policy_leaf_fc_policy_group and aci_interface_policy_spine_policy_group module -- Add aci_l3out_bgp_protocol_profile module -- Add aci_match_community_factor module. -- Add aci_route_control_context and aci_match_rule modules -- Add aci_route_control_profile module -- Add aci_vrf_leak_internal_subnet module (#449) -- Add description parameter for aci_l3out_logical_interface_profile -- Add hmac-sha2-224, hmac-sha2-256, hmac-sha2-384, hmac-sha2-512 authentication types and description to aci_snmp_user module -- Add ip_data_plane_learning attribute to aci_bd_subnet and aci_vrf modules (#413) -- Add local_as_number_config and local_as_number attributes to support bgpLocalAsnP child object in aci_l3out_bgp_peer module (#416) -- Add loopback interface profile as a child class for aci_l3out_logical_node. -- Add missing attributes in aci_interface_policy_leaf_policy_group -- Add missing attributes to aci_l3out_extepg module -- Add missing test cases, fix found issues and add missing attributes for aci_fabric_scheduler, aci_firmware_group, aci_firmware_group_node, aci_firmware_policy, aci_interface_policy_fc, aci_interface_policy_lldp, aci_interface_policy_mcp, aci_interface_policy_ospf, aci_interface_policy_port_channel, aci_maintenance_group, aci_maintenance_group_node, aci_maintenance_policy and aci_tenant_ep_retention_policy modules (#453) -- Add node_type and remote_leaf_pool_id attributes to aci_fabric_node -- Add source_port, source_port_start, source_port_end, tcp_flags and match_only_fragments attributes to aci_filter_entry module (#426) -- Add support for checkmode in aci_rest module -- Add support for configuration of fabric node control with aci_fabric_node_control module -- Add support for configuration of fabric pod selectors with aci_fabric_pod_selector module -- Add support for configuration of system banner and alias with aci_system_banner module -- Add support for configuration of system endpoint controls, ip aging, ep loop protection and roque endpoint control with aci_system_endpoint_controls module -- Add support for configuration of system fabric wide settings with aci_fabric_wide_settings module -- Add support for configuration of system global aes passphrase encryption with aci_system_global_aes_passphrase_encryption module -- Add support for global infra dhcp relay policy configuration in aci_dhcp_relay -- Add support for global infra dhcp relay policy configuration in aci_dhcp_relay_provider - -cisco.ios -~~~~~~~~~ - -- Fixe an issue with some files that doesn't pass the PEP8 sanity check because `type() == ` is not allowed. We need to use `isinstance(,)` function in place -- ios_acls - make remarks ordered and to be applied per ace basis. -- ios_acls - remarks in replaced and overridden state to be negated once per ace. -- ios_config - Relax restrictions on I(src) parameter so it can be used more like I(lines). -- ios_facts - Add CPU utilization. (https://github.com/ansible-collections/cisco.ios/issues/779) -- ios_interfaces - Add template attribute to provide support for cisco ios templates. -- ios_service - Create module to manage service configuration on IOS switches -- ios_snmp_server - Fix an issue with cbgp2 to take in count correctly the bgp traps -- ios_snmp_server - Update the module to manage correctly a lot of traps not take in count -- ios_snmp_user - update the user part to compare correctly the auth and privacy parts. -- ospfv2 - added more tests to improve coverage for the rm_template -- ospfv2 - aliased passive_interface to passive_interfaces that supports a list of interfaces -- ospfv2 - fix area ranges rendering -- ospfv2 - fix passive interfaces rendering -- ospfv2 - optimized all the regex to perform better -- ospfv2 - optimized the config side code for quicker comparison and execution - -cisco.iosxr -~~~~~~~~~~~ - -- Add iosxr_bgp_templates module (https://github.com/ansible-collections/cisco.iosxr/issues/341). -- iosxr_config - Relax restrictions on I(src) parameter so it can be used more like I(lines). (https://github.com/ansible-collections/cisco.iosxr/issues/343). -- iosxr_config Add updates option in return value(https://github.com/ansible-collections/cisco.iosxr/issues/438). -- iosxr_facts - Add CPU utilization. -- iosxr_l2_interfaces - fix issue in supporting multiple iosxr version. (https://github.com/ansible-collections/cisco.iosxr/issues/379). - -cisco.meraki -~~~~~~~~~~~~ - -- administered_identities_me_info - new plugin. -- devices - new plugin. -- devices_appliance_performance_info - new plugin. -- devices_appliance_uplinks_settings - new plugin. -- devices_appliance_uplinks_settings_info - new plugin. -- devices_appliance_vmx_authentication_token - new plugin. -- devices_blink_leds - new plugin. -- devices_camera_analytics_live_info - new plugin. -- devices_camera_custom_analytics - new plugin. -- devices_camera_custom_analytics_info - new plugin. -- devices_camera_generate_snapshot - new plugin. -- devices_camera_quality_and_retention - new plugin. -- devices_camera_quality_and_retention_info - new plugin. -- devices_camera_sense - new plugin. -- devices_camera_sense_info - new plugin. -- devices_camera_video_link_info - new plugin. -- devices_camera_video_settings - new plugin. -- devices_camera_video_settings_info - new plugin. -- devices_camera_wireless_profiles - new plugin. -- devices_camera_wireless_profiles_info - new plugin. -- devices_cellular_gateway_lan - new plugin. -- devices_cellular_gateway_lan_info - new plugin. -- devices_cellular_gateway_port_forwarding_rules - new plugin. -- devices_cellular_gateway_port_forwarding_rules_info - new plugin. -- devices_cellular_sims - new plugin. -- devices_cellular_sims_info - new plugin. -- devices_info - new plugin. -- devices_live_tools_ping - new plugin. -- devices_live_tools_ping_device - new plugin. -- devices_live_tools_ping_device_info - new plugin. -- devices_live_tools_ping_info - new plugin. -- devices_lldp_cdp_info - new plugin. -- devices_management_interface - new plugin. -- devices_management_interface_info - new plugin. -- devices_sensor_relationships - new plugin. -- devices_sensor_relationships_info - new plugin. -- devices_switch_ports - new plugin. -- devices_switch_ports_cycle - new plugin. -- devices_switch_ports_info - new plugin. -- devices_switch_ports_statuses_info - new plugin. -- devices_switch_routing_interfaces - new plugin. -- devices_switch_routing_interfaces_dhcp - new plugin. -- devices_switch_routing_interfaces_dhcp_info - new plugin. -- devices_switch_routing_interfaces_info - new plugin. -- devices_switch_routing_static_routes - new plugin. -- devices_switch_routing_static_routes_info - new plugin. -- devices_switch_warm_spare - new plugin. -- devices_switch_warm_spare_info - new plugin. -- devices_wireless_bluetooth_settings - new plugin. -- devices_wireless_bluetooth_settings_info - new plugin. -- devices_wireless_connection_stats_info - new plugin. -- devices_wireless_latency_stats_info - new plugin. -- devices_wireless_radio_settings - new plugin. -- devices_wireless_radio_settings_info - new plugin. -- devices_wireless_status_info - new plugin. -- meraki_mx_site_to_site_firewall - Fix updating VPN rules per issue 302. -- networks - new plugin. -- networks_alerts_history_info - new plugin. -- networks_alerts_settings - new plugin. -- networks_alerts_settings_info - new plugin. -- networks_appliance_connectivity_monitoring_destinations - new plugin. -- networks_appliance_connectivity_monitoring_destinations_info - new plugin. -- networks_appliance_content_filtering - new plugin. -- networks_appliance_content_filtering_categories_info - new plugin. -- networks_appliance_content_filtering_info - new plugin. -- networks_appliance_firewall_cellular_firewall_rules - new plugin. -- networks_appliance_firewall_cellular_firewall_rules_info - new plugin. -- networks_appliance_firewall_firewalled_services - new plugin. -- networks_appliance_firewall_firewalled_services_info - new plugin. -- networks_appliance_firewall_inbound_firewall_rules - new plugin. -- networks_appliance_firewall_inbound_firewall_rules_info - new plugin. -- networks_appliance_firewall_l3_firewall_rules - new plugin. -- networks_appliance_firewall_l3_firewall_rules_info - new plugin. -- networks_appliance_firewall_l7_firewall_rules - new plugin. -- networks_appliance_firewall_l7_firewall_rules_application_categories_info - new plugin. -- networks_appliance_firewall_l7_firewall_rules_info - new plugin. -- networks_appliance_firewall_one_to_many_nat_rules - new plugin. -- networks_appliance_firewall_one_to_many_nat_rules_info - new plugin. -- networks_appliance_firewall_one_to_one_nat_rules - new plugin. -- networks_appliance_firewall_one_to_one_nat_rules_info - new plugin. -- networks_appliance_firewall_port_forwarding_rules - new plugin. -- networks_appliance_firewall_port_forwarding_rules_info - new plugin. -- networks_appliance_firewall_settings - new plugin. -- networks_appliance_firewall_settings_info - new plugin. -- networks_appliance_ports - new plugin. -- networks_appliance_ports_info - new plugin. -- networks_appliance_prefixes_delegated_statics - new plugin. -- networks_appliance_prefixes_delegated_statics_info - new plugin. -- networks_appliance_security_intrusion - new plugin. -- networks_appliance_security_intrusion_info - new plugin. -- networks_appliance_security_malware - new plugin. -- networks_appliance_security_malware_info - new plugin. -- networks_appliance_settings - new plugin. -- networks_appliance_settings_info - new plugin. -- networks_appliance_single_lan - new plugin. -- networks_appliance_single_lan_info - new plugin. -- networks_appliance_ssids - new plugin. -- networks_appliance_ssids_info - new plugin. -- networks_appliance_static_routes - new plugin. -- networks_appliance_static_routes_info - new plugin. -- networks_appliance_traffic_shaping - new plugin. -- networks_appliance_traffic_shaping_custom_performance_classes - new plugin. -- networks_appliance_traffic_shaping_info - new plugin. -- networks_appliance_traffic_shaping_rules - new plugin. -- networks_appliance_traffic_shaping_rules_info - new plugin. -- networks_appliance_traffic_shaping_uplink_bandwidth - new plugin. -- networks_appliance_traffic_shaping_uplink_bandwidth_info - new plugin. -- networks_appliance_traffic_shaping_uplink_selection - new plugin. -- networks_appliance_traffic_shaping_uplink_selection_info - new plugin. -- networks_appliance_vlans - new plugin. -- networks_appliance_vlans_info - new plugin. -- networks_appliance_vlans_settings - new plugin. -- networks_appliance_vlans_settings_info - new plugin. -- networks_appliance_vpn_bgp - new plugin. -- networks_appliance_vpn_bgp_info - new plugin. -- networks_appliance_vpn_site_to_site_vpn - new plugin. -- networks_appliance_vpn_site_to_site_vpn_info - new plugin. -- networks_appliance_warm_spare - new plugin. -- networks_appliance_warm_spare_info - new plugin. -- networks_appliance_warm_spare_swap - new plugin. -- networks_bind - new plugin. -- networks_bluetooth_clients_info - new plugin. -- networks_camera_quality_retention_profiles - new plugin. -- networks_camera_quality_retention_profiles_info - new plugin. -- networks_camera_wireless_profiles - new plugin. -- networks_camera_wireless_profiles_info - new plugin. -- networks_cellular_gateway_connectivity_monitoring_destinations - new plugin. -- networks_cellular_gateway_connectivity_monitoring_destinations_info - new plugin. -- networks_cellular_gateway_dhcp - new plugin. -- networks_cellular_gateway_dhcp_info - new plugin. -- networks_cellular_gateway_subnet_pool - new plugin. -- networks_cellular_gateway_subnet_pool_info - new plugin. -- networks_cellular_gateway_uplink - new plugin. -- networks_cellular_gateway_uplink_info - new plugin. -- networks_clients_info - new plugin. -- networks_clients_overview_info - new plugin. -- networks_clients_policy - new plugin. -- networks_clients_policy_info - new plugin. -- networks_clients_provision - new plugin. -- networks_clients_splash_authorization_status - new plugin. -- networks_clients_splash_authorization_status_info - new plugin. -- networks_devices_claim - new plugin. -- networks_devices_claim_vmx - new plugin. -- networks_devices_remove - new plugin. -- networks_events_event_types_info - new plugin. -- networks_events_info - new plugin. -- networks_firmware_upgrades - new plugin. -- networks_firmware_upgrades_info - new plugin. -- networks_firmware_upgrades_rollbacks - new plugin. -- networks_firmware_upgrades_staged_events - new plugin. -- networks_firmware_upgrades_staged_events_defer - new plugin. -- networks_firmware_upgrades_staged_events_info - new plugin. -- networks_firmware_upgrades_staged_events_rollbacks - new plugin. -- networks_firmware_upgrades_staged_groups - new plugin. -- networks_firmware_upgrades_staged_groups_info - new plugin. -- networks_firmware_upgrades_staged_stages - new plugin. -- networks_firmware_upgrades_staged_stages_info - new plugin. -- networks_floor_plans - new plugin. -- networks_floor_plans_info - new plugin. -- networks_group_policies - new plugin. -- networks_group_policies_info - new plugin. -- networks_health_alerts_info - new plugin. -- networks_info - new plugin. -- networks_insight_applications_health_by_time_info - new plugin. -- networks_meraki_auth_users - new plugin. -- networks_meraki_auth_users_info - new plugin. -- networks_mqtt_brokers - new plugin. -- networks_netflow - new plugin. -- networks_netflow_info - new plugin. -- networks_pii_pii_keys_info - new plugin. -- networks_pii_requests_delete - new plugin. -- networks_pii_requests_info - new plugin. -- networks_pii_sm_devices_for_key_info - new plugin. -- networks_pii_sm_owners_for_key_info - new plugin. -- networks_policies_by_client_info - new plugin. -- networks_sensor_alerts_current_overview_by_metric_info - new plugin. -- networks_sensor_alerts_overview_by_metric_info - new plugin. -- networks_sensor_alerts_profiles - new plugin. -- networks_sensor_alerts_profiles_info - new plugin. -- networks_sensor_mqtt_brokers - new plugin. -- networks_sensor_mqtt_brokers_info - new plugin. -- networks_sensor_relationships_info - new plugin. -- networks_settings - new plugin. -- networks_settings_info - new plugin. -- networks_sm_bypass_activation_lock_attempts - new plugin. -- networks_sm_bypass_activation_lock_attempts_info - new plugin. -- networks_sm_devices_cellular_usage_history_info - new plugin. -- networks_sm_devices_certs_info - new plugin. -- networks_sm_devices_checkin - new plugin. -- networks_sm_devices_connectivity_info - new plugin. -- networks_sm_devices_desktop_logs_info - new plugin. -- networks_sm_devices_device_command_logs_info - new plugin. -- networks_sm_devices_device_profiles_info - new plugin. -- networks_sm_devices_fields - new plugin. -- networks_sm_devices_info - new plugin. -- networks_sm_devices_lock - new plugin. -- networks_sm_devices_modify_tags - new plugin. -- networks_sm_devices_move - new plugin. -- networks_sm_devices_network_adapters_info - new plugin. -- networks_sm_devices_performance_history_info - new plugin. -- networks_sm_devices_refresh_details - new plugin. -- networks_sm_devices_security_centers_info - new plugin. -- networks_sm_devices_unenroll - new plugin. -- networks_sm_devices_wipe - new plugin. -- networks_sm_devices_wlan_lists_info - new plugin. -- networks_sm_profiles_info - new plugin. -- networks_sm_target_groups - new plugin. -- networks_sm_target_groups_info - new plugin. -- networks_sm_trusted_access_configs_info - new plugin. -- networks_sm_user_access_devices_delete - new plugin. -- networks_sm_user_access_devices_info - new plugin. -- networks_sm_users_device_profiles_info - new plugin. -- networks_sm_users_info - new plugin. -- networks_sm_users_softwares_info - new plugin. -- networks_snmp - new plugin. -- networks_snmp_info - new plugin. -- networks_split - new plugin. -- networks_switch_access_control_lists - new plugin. -- networks_switch_access_control_lists_info - new plugin. -- networks_switch_access_policies - new plugin. -- networks_switch_access_policies_info - new plugin. -- networks_switch_alternate_management_interface - new plugin. -- networks_switch_alternate_management_interface_info - new plugin. -- networks_switch_dhcp_server_policy - new plugin. -- networks_switch_dhcp_server_policy_arp_inspection_trusted_servers - new plugin. -- networks_switch_dhcp_server_policy_arp_inspection_trusted_servers_info - new plugin. -- networks_switch_dhcp_server_policy_arp_inspection_warnings_by_device_info - new plugin. -- networks_switch_dhcp_server_policy_info - new plugin. -- networks_switch_dhcp_v4_servers_seen_info - new plugin. -- networks_switch_dscp_to_cos_mappings - new plugin. -- networks_switch_dscp_to_cos_mappings_info - new plugin. -- networks_switch_link_aggregations - new plugin. -- networks_switch_link_aggregations_info - new plugin. -- networks_switch_mtu - new plugin. -- networks_switch_mtu_info - new plugin. -- networks_switch_port_schedules - new plugin. -- networks_switch_port_schedules_info - new plugin. -- networks_switch_qos_rules_order - new plugin. -- networks_switch_qos_rules_order_info - new plugin. -- networks_switch_routing_multicast - new plugin. -- networks_switch_routing_multicast_info - new plugin. -- networks_switch_routing_multicast_rendezvous_points - new plugin. -- networks_switch_routing_multicast_rendezvous_points_info - new plugin. -- networks_switch_routing_ospf - new plugin. -- networks_switch_routing_ospf_info - new plugin. -- networks_switch_settings - new plugin. -- networks_switch_settings_info - new plugin. -- networks_switch_stacks - new plugin. -- networks_switch_stacks_add - new plugin. -- networks_switch_stacks_info - new plugin. -- networks_switch_stacks_remove - new plugin. -- networks_switch_stacks_routing_interfaces - new plugin. -- networks_switch_stacks_routing_interfaces_dhcp - new plugin. -- networks_switch_stacks_routing_interfaces_dhcp_info - new plugin. -- networks_switch_stacks_routing_interfaces_info - new plugin. -- networks_switch_stacks_routing_static_routes - new plugin. -- networks_switch_stacks_routing_static_routes_info - new plugin. -- networks_switch_storm_control - new plugin. -- networks_switch_storm_control_info - new plugin. -- networks_switch_stp - new plugin. -- networks_switch_stp_info - new plugin. -- networks_syslog_servers - new plugin. -- networks_syslog_servers_info - new plugin. -- networks_topology_link_layer_info - new plugin. -- networks_traffic_analysis - new plugin. -- networks_traffic_analysis_info - new plugin. -- networks_traffic_shaping_application_categories_info - new plugin. -- networks_traffic_shaping_dscp_tagging_options_info - new plugin. -- networks_unbind - new plugin. -- networks_webhooks_http_servers - new plugin. -- networks_webhooks_http_servers_info - new plugin. -- networks_webhooks_payload_templates - new plugin. -- networks_webhooks_payload_templates_info - new plugin. -- networks_webhooks_webhook_tests_info - new plugin. -- networks_wireless_alternate_management_interface - new plugin. -- networks_wireless_alternate_management_interface_info - new plugin. -- networks_wireless_billing - new plugin. -- networks_wireless_billing_info - new plugin. -- networks_wireless_bluetooth_settings - new plugin. -- networks_wireless_bluetooth_settings_info - new plugin. -- networks_wireless_channel_utilization_history_info - new plugin. -- networks_wireless_client_count_history_info - new plugin. -- networks_wireless_clients_connection_stats_info - new plugin. -- networks_wireless_clients_latency_stats_info - new plugin. -- networks_wireless_connection_stats_info - new plugin. -- networks_wireless_data_rate_history_info - new plugin. -- networks_wireless_devices_connection_stats_info - new plugin. -- networks_wireless_failed_connections_info - new plugin. -- networks_wireless_latency_history_info - new plugin. -- networks_wireless_latency_stats_info - new plugin. -- networks_wireless_mesh_statuses_info - new plugin. -- networks_wireless_rf_profiles - new plugin. -- networks_wireless_rf_profiles_info - new plugin. -- networks_wireless_settings - new plugin. -- networks_wireless_settings_info - new plugin. -- networks_wireless_signal_quality_history_info - new plugin. -- networks_wireless_ssids - new plugin. -- networks_wireless_ssids_bonjour_forwarding - new plugin. -- networks_wireless_ssids_bonjour_forwarding_info - new plugin. -- networks_wireless_ssids_device_type_group_policies - new plugin. -- networks_wireless_ssids_device_type_group_policies_info - new plugin. -- networks_wireless_ssids_eap_override - new plugin. -- networks_wireless_ssids_eap_override_info - new plugin. -- networks_wireless_ssids_firewall_l3_firewall_rules - new plugin. -- networks_wireless_ssids_firewall_l3_firewall_rules_info - new plugin. -- networks_wireless_ssids_firewall_l7_firewall_rules - new plugin. -- networks_wireless_ssids_firewall_l7_firewall_rules_info - new plugin. -- networks_wireless_ssids_hotspot20 - new plugin. -- networks_wireless_ssids_hotspot20_info - new plugin. -- networks_wireless_ssids_identity_psks - new plugin. -- networks_wireless_ssids_identity_psks_info - new plugin. -- networks_wireless_ssids_info - new plugin. -- networks_wireless_ssids_schedules - new plugin. -- networks_wireless_ssids_schedules_info - new plugin. -- networks_wireless_ssids_splash_settings - new plugin. -- networks_wireless_ssids_splash_settings_info - new plugin. -- networks_wireless_ssids_traffic_shaping_rules - new plugin. -- networks_wireless_ssids_traffic_shaping_rules_info - new plugin. -- networks_wireless_ssids_vpn - new plugin. -- networks_wireless_ssids_vpn_info - new plugin. -- networks_wireless_usage_history_info - new plugin. -- organizations - new plugin. -- organizations_action_batches - new plugin. -- organizations_action_batches_info - new plugin. -- organizations_adaptive_policy_acls - new plugin. -- organizations_adaptive_policy_acls_info - new plugin. -- organizations_adaptive_policy_groups - new plugin. -- organizations_adaptive_policy_groups_info - new plugin. -- organizations_adaptive_policy_overview_info - new plugin. -- organizations_adaptive_policy_policies - new plugin. -- organizations_adaptive_policy_policies_info - new plugin. -- organizations_adaptive_policy_settings - new plugin. -- organizations_adaptive_policy_settings_info - new plugin. -- organizations_admins - new plugin. -- organizations_admins_info - new plugin. -- organizations_alerts_profiles - new plugin. -- organizations_api_requests_info - new plugin. -- organizations_api_requests_overview_info - new plugin. -- organizations_api_requests_overview_response_codes_by_interval_info - new plugin. -- organizations_appliance_security_intrusion - new plugin. -- organizations_appliance_security_intrusion_info - new plugin. -- organizations_appliance_vpn_third_party_vpnpeers - new plugin. -- organizations_appliance_vpn_third_party_vpnpeers_info - new plugin. -- organizations_appliance_vpn_vpn_firewall_rules - new plugin. -- organizations_appliance_vpn_vpn_firewall_rules_info - new plugin. -- organizations_branding_policies - new plugin. -- organizations_branding_policies_info - new plugin. -- organizations_branding_policies_priorities - new plugin. -- organizations_branding_policies_priorities_info - new plugin. -- organizations_camera_custom_analytics_artifacts - new plugin. -- organizations_camera_custom_analytics_artifacts_info - new plugin. -- organizations_cellular_gateway_uplink_statuses_info - new plugin. -- organizations_claim - new plugin. -- organizations_clients_bandwidth_usage_history_info - new plugin. -- organizations_clients_overview_info - new plugin. -- organizations_clients_search_info - new plugin. -- organizations_clone - new plugin. -- organizations_config_templates - new plugin. -- organizations_config_templates_info - new plugin. -- organizations_config_templates_switch_profiles_info - new plugin. -- organizations_config_templates_switch_profiles_ports - new plugin. -- organizations_config_templates_switch_profiles_ports_info - new plugin. -- organizations_devices_availabilities_info - new plugin. -- organizations_devices_info - new plugin. -- organizations_devices_power_modules_statuses_by_device_info - new plugin. -- organizations_devices_provisioning_statuses_info - new plugin. -- organizations_devices_statuses_info - new plugin. -- organizations_devices_statuses_overview_info - new plugin. -- organizations_devices_uplinks_addresses_by_device_info - new plugin. -- organizations_devices_uplinks_loss_and_latency_info - new plugin. -- organizations_early_access_features_info - new plugin. -- organizations_early_access_features_opt_ins - new plugin. -- organizations_early_access_features_opt_ins_info - new plugin. -- organizations_firmware_upgrades_by_device_info - new plugin. -- organizations_firmware_upgrades_info - new plugin. -- organizations_info - new plugin. -- organizations_insight_applications_info - new plugin. -- organizations_insight_monitored_media_servers - new plugin. -- organizations_insight_monitored_media_servers_info - new plugin. -- organizations_inventory_claim - new plugin. -- organizations_inventory_devices_info - new plugin. -- organizations_inventory_onboarding_cloud_monitoring_export_events - new plugin. -- organizations_inventory_onboarding_cloud_monitoring_imports - new plugin. -- organizations_inventory_onboarding_cloud_monitoring_imports_info - new plugin. -- organizations_inventory_onboarding_cloud_monitoring_networks_info - new plugin. -- organizations_inventory_onboarding_cloud_monitoring_prepare - new plugin. -- organizations_inventory_release - new plugin. -- organizations_licenses - new plugin. -- organizations_licenses_assign_seats - new plugin. -- organizations_licenses_info - new plugin. -- organizations_licenses_move - new plugin. -- organizations_licenses_move_seats - new plugin. -- organizations_licenses_overview_info - new plugin. -- organizations_licenses_renew_seats - new plugin. -- organizations_licensing_coterm_licenses_info - new plugin. -- organizations_licensing_coterm_licenses_move - new plugin. -- organizations_login_security - new plugin. -- organizations_login_security_info - new plugin. -- organizations_networks_combine - new plugin. -- organizations_openapi_spec_info - new plugin. -- organizations_policy_objects - new plugin. -- organizations_policy_objects_groups - new plugin. -- organizations_policy_objects_groups_info - new plugin. -- organizations_policy_objects_info - new plugin. -- organizations_saml - new plugin. -- organizations_saml_idps - new plugin. -- organizations_saml_idps_info - new plugin. -- organizations_saml_info - new plugin. -- organizations_saml_roles - new plugin. -- organizations_saml_roles_info - new plugin. -- organizations_sensor_readings_history_info - new plugin. -- organizations_sensor_readings_latest_info - new plugin. -- organizations_sm_apns_cert_info - new plugin. -- organizations_sm_vpp_accounts_info - new plugin. -- organizations_snmp - new plugin. -- organizations_snmp_info - new plugin. -- organizations_summary_top_appliances_by_utilization_info - new plugin. -- organizations_summary_top_clients_by_usage_info - new plugin. -- organizations_summary_top_clients_manufacturers_by_usage_info - new plugin. -- organizations_summary_top_devices_by_usage_info - new plugin. -- organizations_summary_top_devices_models_by_usage_info - new plugin. -- organizations_summary_top_ssids_by_usage_info - new plugin. -- organizations_summary_top_switches_by_energy_usage_info - new plugin. -- organizations_switch_devices_clone - new plugin. -- organizations_switch_ports_by_switch_info - new plugin. -- organizations_uplinks_statuses_info - new plugin. -- organizations_users - new plugin. -- organizations_webhooks_logs_info - new plugin. -- organizations_wireless_devices_ethernet_statuses_info - new plugin. - -cisco.mso -~~~~~~~~~ - -- Add login domain attribute to mso httpapi connection plugin with restructure of connection parameter handling -- Add mso_schema_template_anp_epg_useg_attribute and mso_schema_site_anp_epg_useg_attribute modules to manage EPG uSeg attributes (#370) - -cisco.nxos -~~~~~~~~~~ - -- Add nxos_bgp_templates module. -- Added new module fc_interfaces -- bgp_global - support remote-as as a route-map (https://github.com/ansible-collections/cisco.nxos/issues/741). -- bgp_neighbor_address_family - support rewrite-rt-asn for ipv4 mvpn (https://github.com/ansible-collections/cisco.nxos/issues/741). -- bgp_templates - Add support for safi evpn (https://github.com/ansible-collections/cisco.nxos/issues/739). -- bgp_templates - Add support for send_community (https://github.com/ansible-collections/cisco.nxos/issues/740). -- nxos_facts - add cpu utilization data to facts. -- nxos_user - Add support for hashed passwords. (https://github.com/ansible-collections/cisco.nxos/issues/370). -- nxos_user - Added dev-ops role to BUILTINS (https://github.com/ansible-collections/cisco.nxos/issues/690) -- route_maps - support extcommunity rt option (https://github.com/ansible-collections/cisco.nxos/issues/743). - -community.aws -~~~~~~~~~~~~~ - -- api_gateway - add support for parameters ``name``, ``lookup``, ``tags`` and ``purge_tags`` (https://github.com/ansible-collections/community.aws/pull/1845). -- 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) -- dynamodb_table - added waiter when updating indexes to avoid concurrency issues (https://github.com/ansible-collections/community.aws/pull/1866). -- dynamodb_table - increased default timeout based on time to update indexes in CI (https://github.com/ansible-collections/community.aws/pull/1866). -- ec2_vpc_vpn - add support for connecting VPNs to a transit gateway (https://github.com/ansible-collections/community.aws/pull/1877). -- 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). -- iam_group - refactored ARN validation handling (https://github.com/ansible-collections/community.aws/pull/1848). -- iam_role - refactored ARN validation handling (https://github.com/ansible-collections/community.aws/pull/1848). -- sns_topic - refactored ARN validation handling (https://github.com/ansible-collections/community.aws/pull/1848). - -community.ciscosmb -~~~~~~~~~~~~~~~~~~ - -- added Ansible playbook examples ``cismosmb_inventory_template.yml``, ``cismosmb_gather_facts.yml``, ``cismosmb_commands.yml`` -- no longer testing for ansible 2.9 and for Python 2.6 / 2.7 -- removed unused portion of code in cliconf/ciscosmb.yml -- test Ansible 2.14 - -community.crypto -~~~~~~~~~~~~~~~~ - -- acme_certificate - allow to use no challenge by providing ``no challenge`` for the ``challenge`` option. This is needed for ACME servers where validation is done without challenges (https://github.com/ansible-collections/community.crypto/issues/613, https://github.com/ansible-collections/community.crypto/pull/615). -- acme_certificate - validate and wait for challenges in parallel instead handling them one after another (https://github.com/ansible-collections/community.crypto/pull/617). -- luks_devices - add new options ``keyslot``, ``new_keyslot``, and ``remove_keyslot`` to allow adding/removing keys to/from specific keyslots (https://github.com/ansible-collections/community.crypto/pull/664). -- openssh_keypair - fail when comment cannot be updated (https://github.com/ansible-collections/community.crypto/pull/646). -- x509_certificate_info - added support for certificates in DER format when using ``path`` parameter (https://github.com/ansible-collections/community.crypto/issues/603). - -community.digitalocean -~~~~~~~~~~~~~~~~~~~~~~ - -- documentation - use C(true) and C(false) for boolean values in documentation and examples (https://github.com/ansible-collections/community.digitalocean/issues/303). -- inventory plugin - drop C(api_token) in favor of C(oauth_token) for consistency (https://github.com/ansible-collections/community.digitalocean/issues/300). -- tests - add C(sanity), C(units), and C(psf/black) back on merge into C(main) (https://github.com/ansible-collections/community.digitalocean/pull/311). -- tests - drop Ansible 2.9 and Ansible Core 2.10 and 2.11 (https://github.com/ansible-collections/community.digitalocean/pull/310). -- tests - remove the daily runs (https://github.com/ansible-collections/community.digitalocean/pull/310). -- tests - run C(psf/black) across all files (https://github.com/ansible-collections/community.digitalocean/pull/310). -- tests - test against Ansible Core 2.12, 2.13, and 2.14 (https://github.com/ansible-collections/community.digitalocean/pull/310). - -community.dns -~~~~~~~~~~~~~ - -- wait_for_txt - add ``servfail_retries`` parameter that allows retrying after SERVFAIL errors (https://github.com/ansible-collections/community.dns/pull/159). -- wait_for_txt, resolver module utils - use `EDNS `__ (https://github.com/ansible-collections/community.dns/pull/158). - -community.general -~~~~~~~~~~~~~~~~~ - -- The collection will start using semantic markup (https://github.com/ansible-collections/community.general/pull/6539). -- VarDict module utils - add method ``VarDict.as_dict()`` to convert to a plain ``dict`` object (https://github.com/ansible-collections/community.general/pull/6602). -- apt_rpm - extract package name from local ``.rpm`` path when verifying - installation success. Allows installing packages from local ``.rpm`` files - (https://github.com/ansible-collections/community.general/pull/7396). -- cargo - add option ``executable``, which allows user to specify path to the cargo binary (https://github.com/ansible-collections/community.general/pull/7352). -- cargo - add option ``locked`` which allows user to specify install the locked version of dependency instead of latest compatible version (https://github.com/ansible-collections/community.general/pull/6134). -- chroot connection plugin - add ``disable_root_check`` option (https://github.com/ansible-collections/community.general/pull/7099). -- cloudflare_dns - add CAA record support (https://github.com/ansible-collections/community.general/pull/7399). -- cobbler inventory plugin - add ``exclude_mgmt_classes`` and ``include_mgmt_classes`` options to exclude or include hosts based on management classes (https://github.com/ansible-collections/community.general/pull/7184). -- cobbler inventory plugin - add ``inventory_hostname`` option to allow using the system name for the inventory hostname (https://github.com/ansible-collections/community.general/pull/6502). -- cobbler inventory plugin - add ``want_ip_addresses`` option to collect all interface DNS name to IP address mapping (https://github.com/ansible-collections/community.general/pull/6711). -- cobbler inventory plugin - add primary IP addess to ``cobbler_ipv4_address`` and IPv6 address to ``cobbler_ipv6_address`` host variable (https://github.com/ansible-collections/community.general/pull/6711). -- cobbler inventory plugin - add warning for systems with empty profiles (https://github.com/ansible-collections/community.general/pull/6502). -- cobbler inventory plugin - convert Ansible unicode strings to native Python unicode strings before passing user/password to XMLRPC client (https://github.com/ansible-collections/community.general/pull/6923). -- consul_session - drops requirement for the ``python-consul`` library to communicate with the Consul API, instead relying on the existing ``requests`` library requirement (https://github.com/ansible-collections/community.general/pull/6755). -- copr - respawn module to use the system python interpreter when the ``dnf`` python module is not available in ``ansible_python_interpreter`` (https://github.com/ansible-collections/community.general/pull/6522). -- cpanm - minor refactor when creating the ``CmdRunner`` object (https://github.com/ansible-collections/community.general/pull/7231). -- datadog_monitor - adds ``notification_preset_name``, ``renotify_occurrences`` and ``renotify_statuses`` parameters (https://github.com/ansible-collections/community.general/issues/6521,https://github.com/ansible-collections/community.general/issues/5823). -- dig lookup plugin - add TCP option to enable the use of TCP connection during DNS lookup (https://github.com/ansible-collections/community.general/pull/7343). -- ejabberd_user - module now using ``CmdRunner`` to execute external command (https://github.com/ansible-collections/community.general/pull/7075). -- filesystem - add ``uuid`` parameter for UUID change feature (https://github.com/ansible-collections/community.general/pull/6680). -- gitlab_group - add option ``force_delete`` (default: false) which allows delete group even if projects exists in it (https://github.com/ansible-collections/community.general/pull/7364). -- gitlab_group_variable - add support for ``raw`` variables suboption (https://github.com/ansible-collections/community.general/pull/7132). -- gitlab_project_variable - add support for ``raw`` variables suboption (https://github.com/ansible-collections/community.general/pull/7132). -- gitlab_project_variable - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928). -- gitlab_runner - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6927). -- htpasswd - minor code improvements in the module (https://github.com/ansible-collections/community.general/pull/6901). -- htpasswd - the parameter ``crypt_scheme`` is being renamed as ``hash_scheme`` and added as an alias to it (https://github.com/ansible-collections/community.general/pull/6841). -- icinga2_host - the ``ip`` option is no longer required, since Icinga 2 allows for an empty address attribute (https://github.com/ansible-collections/community.general/pull/7452). -- ini_file - add ``ignore_spaces`` option (https://github.com/ansible-collections/community.general/pull/7273). -- ini_file - add ``modify_inactive_option`` option (https://github.com/ansible-collections/community.general/pull/7401). -- ipa_config - add module parameters to manage FreeIPA user and group objectclasses (https://github.com/ansible-collections/community.general/pull/7019). -- ipa_config - adds ``idp`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7051). -- jenkins_build - add new ``detach`` option, which allows the module to exit successfully as long as the build is created (default functionality is still waiting for the build to end before exiting) (https://github.com/ansible-collections/community.general/pull/7204). -- jenkins_build - add new ``time_between_checks`` option, which allows to configure the wait time between requests to the Jenkins server (https://github.com/ansible-collections/community.general/pull/7204). -- keycloak_authentication - added provider ID choices, since Keycloak supports only those two specific ones (https://github.com/ansible-collections/community.general/pull/6763). -- keycloak_client_rolemapping - adds support for subgroups with additional parameter ``parents`` (https://github.com/ansible-collections/community.general/pull/6687). -- keycloak_role - add composite roles support for realm and client roles (https://github.com/ansible-collections/community.general/pull/6469). -- keyring - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6927). -- ldap_* - add new arguments ``client_cert`` and ``client_key`` to the LDAP modules in order to allow certificate authentication (https://github.com/ansible-collections/community.general/pull/6668). -- ldap_search - add a new ``page_size`` option to enable paged searches (https://github.com/ansible-collections/community.general/pull/6648). -- locale_gen - module has been refactored to use ``ModuleHelper`` and ``CmdRunner`` (https://github.com/ansible-collections/community.general/pull/6903). -- locale_gen - module now using ``CmdRunner`` to execute external commands (https://github.com/ansible-collections/community.general/pull/6820). -- lvg - add ``active`` and ``inactive`` values to the ``state`` option for active state management feature (https://github.com/ansible-collections/community.general/pull/6682). -- lvg - add ``reset_vg_uuid``, ``reset_pv_uuid`` options for UUID reset feature (https://github.com/ansible-collections/community.general/pull/6682). -- lxc connection plugin - properly handle a change of the ``remote_addr`` option (https://github.com/ansible-collections/community.general/pull/7373). -- lxd connection plugin - automatically translate ``remote_addr`` from FQDN to (short) hostname (https://github.com/ansible-collections/community.general/pull/7360). -- lxd connection plugin - update error parsing to work with newer messages mentioning instances (https://github.com/ansible-collections/community.general/pull/7360). -- lxd inventory plugin - add ``server_cert`` option for trust anchor to use for TLS verification of server certificates (https://github.com/ansible-collections/community.general/pull/7392). -- lxd inventory plugin - add ``server_check_hostname`` option to disable hostname verification of server certificates (https://github.com/ansible-collections/community.general/pull/7392). -- make - add new ``targets`` parameter allowing multiple targets to be used with ``make`` (https://github.com/ansible-collections/community.general/pull/6882, https://github.com/ansible-collections/community.general/issues/4919). -- make - allows ``params`` to be used without value (https://github.com/ansible-collections/community.general/pull/7180). -- mas - disable sign-in check for macOS 12+ as ``mas account`` is non-functional (https://github.com/ansible-collections/community.general/pull/6520). -- newrelic_deployment - add option ``app_name_exact_match``, which filters results for the exact app_name provided (https://github.com/ansible-collections/community.general/pull/7355). -- nmap inventory plugin - now has a ``use_arp_ping`` option to allow the user to disable the default ARP ping query for a more reliable form (https://github.com/ansible-collections/community.general/pull/7119). -- nmcli - add support for ``ipv4.dns-options`` and ``ipv6.dns-options`` (https://github.com/ansible-collections/community.general/pull/6902). -- nomad_job, nomad_job_info - add ``port`` parameter (https://github.com/ansible-collections/community.general/pull/7412). -- npm - minor improvement on parameter validation (https://github.com/ansible-collections/community.general/pull/6848). -- npm - module now using ``CmdRunner`` to execute external commands (https://github.com/ansible-collections/community.general/pull/6989). -- onepassword lookup plugin - add service account support (https://github.com/ansible-collections/community.general/issues/6635, https://github.com/ansible-collections/community.general/pull/6660). -- onepassword lookup plugin - introduce ``account_id`` option which allows specifying which account to use (https://github.com/ansible-collections/community.general/pull/7308). -- onepassword_raw lookup plugin - add service account support (https://github.com/ansible-collections/community.general/issues/6635, https://github.com/ansible-collections/community.general/pull/6660). -- onepassword_raw lookup plugin - introduce ``account_id`` option which allows specifying which account to use (https://github.com/ansible-collections/community.general/pull/7308). -- opentelemetry callback plugin - add span attributes in the span event (https://github.com/ansible-collections/community.general/pull/6531). -- opkg - add ``executable`` parameter allowing to specify the path of the ``opkg`` command (https://github.com/ansible-collections/community.general/pull/6862). -- opkg - remove default value ``""`` for parameter ``force`` as it causes the same behaviour of not having that parameter (https://github.com/ansible-collections/community.general/pull/6513). -- pagerduty - adds in option to use v2 API for creating pagerduty incidents (https://github.com/ansible-collections/community.general/issues/6151) -- parted - on resize, use ``--fix`` option if available (https://github.com/ansible-collections/community.general/pull/7304). -- pnpm - set correct version when state is latest or version is not mentioned. Resolves previous idempotency problem (https://github.com/ansible-collections/community.general/pull/7339). -- pritunl module utils - ensure ``validate_certs`` parameter is honoured in all methods (https://github.com/ansible-collections/community.general/pull/7156). -- proxmox - add ``vmid`` (and ``taskid`` when possible) to return values (https://github.com/ansible-collections/community.general/pull/7263). -- proxmox - support ``timezone`` parameter at container creation (https://github.com/ansible-collections/community.general/pull/6510). -- proxmox inventory plugin - add composite variables support for Proxmox nodes (https://github.com/ansible-collections/community.general/issues/6640). -- proxmox_kvm - added support for ``tpmstate0`` parameter to configure TPM (Trusted Platform Module) disk. TPM is required for Windows 11 installations (https://github.com/ansible-collections/community.general/pull/6533). -- proxmox_kvm - enabled force restart of VM, bringing the ``force`` parameter functionality in line with what is described in the docs (https://github.com/ansible-collections/community.general/pull/6914). -- proxmox_kvm - re-use ``timeout`` module param to forcefully shutdown a virtual machine when ``state`` is ``stopped`` (https://github.com/ansible-collections/community.general/issues/6257). -- proxmox_snap - add ``retention`` parameter to delete old snapshots (https://github.com/ansible-collections/community.general/pull/6576). -- proxmox_vm_info - ``node`` parameter is no longer required. Information can be obtained for the whole cluster (https://github.com/ansible-collections/community.general/pull/6976). -- proxmox_vm_info - non-existing provided by name/vmid VM would return empty results instead of failing (https://github.com/ansible-collections/community.general/pull/7049). -- pubnub_blocks - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928). -- random_string - added new ``ignore_similar_chars`` and ``similar_chars`` option to ignore certain chars (https://github.com/ansible-collections/community.general/pull/7242). -- redfish_command - add ``MultipartHTTPPushUpdate`` command (https://github.com/ansible-collections/community.general/issues/6471, https://github.com/ansible-collections/community.general/pull/6612). -- redfish_command - add ``account_types`` and ``oem_account_types`` as optional inputs to ``AddUser`` (https://github.com/ansible-collections/community.general/issues/6823, https://github.com/ansible-collections/community.general/pull/6871). -- redfish_command - add new option ``update_oem_params`` for the ``MultipartHTTPPushUpdate`` command (https://github.com/ansible-collections/community.general/issues/7331). -- redfish_config - add ``CreateVolume`` command to allow creation of volumes on servers (https://github.com/ansible-collections/community.general/pull/6813). -- redfish_config - add ``DeleteAllVolumes`` command to allow deletion of all volumes on servers (https://github.com/ansible-collections/community.general/pull/6814). -- redfish_config - adding ``SetSecureBoot`` command (https://github.com/ansible-collections/community.general/pull/7129). -- redfish_info - add ``AccountTypes`` and ``OEMAccountTypes`` to the output of ``ListUsers`` (https://github.com/ansible-collections/community.general/issues/6823, https://github.com/ansible-collections/community.general/pull/6871). -- redfish_info - add support for ``GetBiosRegistries`` command (https://github.com/ansible-collections/community.general/pull/7144). -- redfish_info - adds ``LinkStatus`` to NIC inventory (https://github.com/ansible-collections/community.general/pull/7318). -- redfish_info - adds ``ProcessorArchitecture`` to CPU inventory (https://github.com/ansible-collections/community.general/pull/6864). -- redfish_info - fix for ``GetVolumeInventory``, Controller name was getting populated incorrectly and duplicates were seen in the volumes retrieved (https://github.com/ansible-collections/community.general/pull/6719). -- redfish_info - report ``Id`` in the output of ``GetManagerInventory`` (https://github.com/ansible-collections/community.general/pull/7140). -- redfish_utils - use ``Controllers`` key in redfish data to obtain Storage controllers properties (https://github.com/ansible-collections/community.general/pull/7081). -- redfish_utils module utils - add support for ``PowerCycle`` reset type for ``redfish_command`` responses feature (https://github.com/ansible-collections/community.general/issues/7083). -- redfish_utils module utils - add support for following ``@odata.nextLink`` pagination in ``software_inventory`` responses feature (https://github.com/ansible-collections/community.general/pull/7020). -- redfish_utils module utils - support ``Volumes`` in response for ``GetDiskInventory`` (https://github.com/ansible-collections/community.general/pull/6819). -- redhat_subscription - the internal ``RegistrationBase`` class was folded - into the other internal ``Rhsm`` class, as the separation had no purpose - anymore - (https://github.com/ansible-collections/community.general/pull/6658). -- redis_info - refactor the redis_info module to use the redis module_utils enabling to pass TLS parameters to the Redis client (https://github.com/ansible-collections/community.general/pull/7267). -- rhsm_release - improve/harden the way ``subscription-manager`` is run; - no behaviour change is expected - (https://github.com/ansible-collections/community.general/pull/6669). -- rhsm_repository - the interaction with ``subscription-manager`` was - refactored by grouping things together, removing unused bits, and hardening - the way it is run; also, the parsing of ``subscription-manager repos --list`` - was improved and made slightly faster; no behaviour change is expected - (https://github.com/ansible-collections/community.general/pull/6783, - https://github.com/ansible-collections/community.general/pull/6837). -- scaleway_security_group_rule - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928). -- shutdown - use ``shutdown -p ...`` with FreeBSD to halt and power off machine (https://github.com/ansible-collections/community.general/pull/7102). -- snap - add option ``dangerous`` to the module, that will map into the command line argument ``--dangerous``, allowing unsigned snap files to be installed (https://github.com/ansible-collections/community.general/pull/6908, https://github.com/ansible-collections/community.general/issues/5715). -- snap - module is now aware of channel when deciding whether to install or refresh the snap (https://github.com/ansible-collections/community.general/pull/6435, https://github.com/ansible-collections/community.general/issues/1606). -- sorcery - add grimoire (repository) management support (https://github.com/ansible-collections/community.general/pull/7012). -- sorcery - minor refactor (https://github.com/ansible-collections/community.general/pull/6525). -- supervisorctl - allow to stop matching running processes before removing them with ``stop_before_removing=true`` (https://github.com/ansible-collections/community.general/pull/7284). -- tss lookup plugin - allow to fetch secret IDs which are in a folder based on folder ID. Previously, we could not fetch secrets based on folder ID but now use ``fetch_secret_ids_from_folder`` option to indicate to fetch secret IDs based on folder ID (https://github.com/ansible-collections/community.general/issues/6223). -- tss lookup plugin - allow to fetch secret by path. Previously, we could not fetch secret by path but now use ``secret_path`` option to indicate to fetch secret by secret path (https://github.com/ansible-collections/community.general/pull/6881). -- unixy callback plugin - add support for ``check_mode_markers`` option (https://github.com/ansible-collections/community.general/pull/7179). -- vardict module utils - added convenience methods to ``VarDict`` (https://github.com/ansible-collections/community.general/pull/6647). -- xenserver_guest_info - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928). -- xenserver_guest_powerstate - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928). -- yum_versionlock - add support to pin specific package versions instead of only the package itself (https://github.com/ansible-collections/community.general/pull/6861, https://github.com/ansible-collections/community.general/issues/4470). - -community.grafana -~~~~~~~~~~~~~~~~~ - -- Add `grafana_organization_user` module -- Bump version of Python used in tests to 3.10 -- Enable datasource option `time_interval` for prometheus -- Fix documentation url for Ansible doc website -- Now testing against Grafana 9.5.13, 8.5.27, 10.2.0 - -community.libvirt -~~~~~~~~~~~~~~~~~ - -- virt - add `mutate_flags` parameter to enable XML mutation (add UUID, MAC addresses from existing domain) (https://github.com/ansible-collections/community.libvirt/pull/142/). -- virt - support ``--diff`` for ``define`` command (https://github.com/ansible-collections/community.libvirt/pull/142/). - -community.mysql -~~~~~~~~~~~~~~~ - -- mysql_info - add filter ``users_info`` (https://github.com/ansible-collections/community.mysql/pull/580). -- mysql_role - add ``column_case_sensitive`` option to prevent field names from being uppercased (https://github.com/ansible-collections/community.mysql/pull/569). -- mysql_user - add ``column_case_sensitive`` option to prevent field names from being uppercased (https://github.com/ansible-collections/community.mysql/pull/569). - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- Collection core functions - use ``get_server_version`` in all modules (https://github.com/ansible-collections/community.postgresql/pull/518)." -- Collection core functions - use common cursor arguments in all modules (https://github.com/ansible-collections/community.postgresql/pull/522)." -- postgres modules - added support for Psycopg 3 library (https://github.com/ansible-collections/community.postgresql/pull/517). -- postgresql_ext - added idempotence always both in standard and in check mode (https://github.com/ansible-collections/community.postgresql/pull/545). -- postgresql_ext - added idempotence when version=latest (https://github.com/ansible-collections/community.postgresql/pull/504). -- postgresql_ext - added prev_version and version return values (https://github.com/ansible-collections/community.postgresql/pull/545). -- postgresql_ext - added queries in module output also in check mode (https://github.com/ansible-collections/community.postgresql/pull/545). -- postgresql_ext - improved error messages (https://github.com/ansible-collections/community.postgresql/pull/545). -- postgresql_owner - added support at new object types (https://github.com/ansible-collections/community.postgresql/pull/555). -- postgresql_privs - added idempotence when roles=PUBLIC (https://github.com/ansible-collections/community.postgresql/pull/502). -- postgresql_privs - added parameters privileges support for PostgreSQL 15 or higher (https://github.com/ansible-collections/community.postgresql/issues/481). -- postgresql_privs - added support for implicit roles CURRENT_ROLE, CURRENT_USER, and SESSION_USER (https://github.com/ansible-collections/community.postgresql/pull/502). -- postgresql_tablespace - added idempotence when dropping a non-existing tablespace (https://github.com/ansible-collections/community.postgresql/pull/554). - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- api_info - add new ``include_read_only`` option to select behavior for read-only values. By default these are not returned (https://github.com/ansible-collections/community.routeros/pull/213). -- api_info, api_modify - add path ``caps-man channel`` and enable path ``caps-man manager interface`` (https://github.com/ansible-collections/community.routeros/issues/193, https://github.com/ansible-collections/community.routeros/pull/194). -- api_info, api_modify - add path ``ip traffic-flow target`` (https://github.com/ansible-collections/community.routeros/issues/191, https://github.com/ansible-collections/community.routeros/pull/192). -- api_info, api_modify - add support for ``address-list`` and ``match-subdomain`` introduced by RouterOS 7.7 in the ``ip dns static`` path (https://github.com/ansible-collections/community.routeros/pull/197). -- api_info, api_modify - add support for ``user``, ``time`` and ``gmt-offset`` under the ``system clock`` path (https://github.com/ansible-collections/community.routeros/pull/210). -- api_info, api_modify - add support for the ``interface ppp-client`` path (https://github.com/ansible-collections/community.routeros/pull/199). -- api_info, api_modify - add support for the ``interface wireless`` path (https://github.com/ansible-collections/community.routeros/pull/195). -- api_info, api_modify - add support for the ``iot modbus`` path (https://github.com/ansible-collections/community.routeros/pull/205). -- api_info, api_modify - add support for the ``ip dhcp-server option`` and ``ip dhcp-server option sets`` paths (https://github.com/ansible-collections/community.routeros/pull/223). -- api_info, api_modify - add support for the ``ip upnp interfaces``, ``tool graphing interface``, ``tool graphing resource`` paths (https://github.com/ansible-collections/community.routeros/pull/227). -- api_info, api_modify - add support for the ``ipv6 firewall nat`` path (https://github.com/ansible-collections/community.routeros/pull/204). -- api_info, api_modify - add support for the ``mode`` property in ``ip neighbor discovery-settings`` introduced in RouterOS 7.7 (https://github.com/ansible-collections/community.routeros/pull/198). -- api_info, api_modify - add support for the ``port remote-access`` path (https://github.com/ansible-collections/community.routeros/pull/224). -- api_info, api_modify - add support for the ``routing filter rule`` and ``routing filter select-rule`` paths (https://github.com/ansible-collections/community.routeros/pull/200). -- api_info, api_modify - add support for the ``routing table`` path in RouterOS 7 (https://github.com/ansible-collections/community.routeros/pull/215). -- api_info, api_modify - add support for the ``tool netwatch`` path in RouterOS 7 (https://github.com/ansible-collections/community.routeros/pull/216). -- api_info, api_modify - add support for the ``user settings`` path (https://github.com/ansible-collections/community.routeros/pull/201). -- api_info, api_modify - add support for the ``user`` path (https://github.com/ansible-collections/community.routeros/pull/211). -- api_info, api_modify - finalize fields for the ``interface wireless security-profiles`` path and enable it (https://github.com/ansible-collections/community.routeros/pull/203). -- api_info, api_modify - finalize fields for the ``ppp profile`` path and enable it (https://github.com/ansible-collections/community.routeros/pull/217). -- api_modify - add new ``handle_read_only`` and ``handle_write_only`` options to handle the module's behavior for read-only and write-only fields (https://github.com/ansible-collections/community.routeros/pull/213). -- api_modify, api_info - support API paths ``routing id``, ``routing bgp connection`` (https://github.com/ansible-collections/community.routeros/pull/220). - -community.vmware -~~~~~~~~~~~~~~~~ - -- Removed module / plugin documentation RST files from the repository (https://github.com/ansible-collections/community.vmware/pull/1897). -- Using semantic markup in documentation (https://github.com/ansible-collections/community.vmware/issues/1771). -- add moid property in the return value for the module(https://github.com/ansible-collections/community.vmware/pull/1855). -- add new snapshot_id option to the vmware_guest_snapshot module(https://github.com/ansible-collections/community.vmware/pull/1847). -- autoselect_datastore - add support to also look at NFS mounted filesystems (previously was just VMFS) -- vmware_cluster_drs_recommendations - Add the Module to apply the drs recommendations (https://github.com/ansible-collections/community.vmware/pull/1736) -- vmware_deploy_ovf - New parameter enable_hidden_properties to force OVF properties marked as `ovf:userConfigurable=false` to become user configurable (https://github.com/ansible-collections/community.vmware/issues/802). -- vmware_dvs_portgroup_info - add moid property in the return value for the module (https://github.com/ansible-collections/community.vmware/issues/1849). -- vmware_guest - add support for configuring vMotion and FT encryption (https://github.com/ansible-collections/community.vmware/issues/1069) -- vmware_guest_serial_port - add support for proxyURI parameter to enable use of a virtual serial port concentrator (https://github.com/ansible-collections/community.vmware/issues/1742) -- vmware_guest_snapshot - add new snapshot_id option (https://github.com/ansible-collections/community.vmware/pull/1847). -- vmware_host_datastore - added new datastore type 'vvol' for enabling creation/deletion of vVols datastores -- vmware_host_datastore - added new parameter resignature for supporting resignaturing an existing VMFS datastore on an imported/cloned LUN. -- vmware_host_snmp module now can configure SNMP agent on set of hosts (list in esxi_hostname parameter or as cluster in cluster_name parameter). The ability to configure the host directly remains (https://github.com/ansible-collections/community.vmware/issues/1799). -- vmware_vm_info - Add `instance_uuid` to the result (https://github.com/ansible-collections/community.vmware/issues/1805) - -community.windows -~~~~~~~~~~~~~~~~~ - -- win_dns_record - Added ``zone_scope`` option to manage a record in a specific zone scope - -community.zabbix -~~~~~~~~~~~~~~~~ - -- Multiple Roles - Replaced depricated 'include' statements with 'include_tasks' -- Update action_groups variable in runtime.yml -- all roles - Added support for Debian 12 (Bookworm) -- all roles - Delete gpg ids variable. -- all roles - Modified to allow a non-root user to run the role. -- all roles - Updated testing to account for the correct version of Zabbix -- zabbix_hostmacro module - Add description property for Host macro creation/update. Allow to set/update description of Zabbix host macros. -- zabbix_proxy - Added installation of PyMySQL pip package -- zabbix_proxy - Modified installation of Centos 7 MySQL client -- zabbix_proxy - Standardized MySQL client installed on Debian and Ubuntu -- zabbix_regexp module added -- zabbix_settings module added -- zabbix_token module added - -containers.podman -~~~~~~~~~~~~~~~~~ - -- Update docs -- podman_container - Add support for health-on-failure action -- podman_image -Add target support for podman build image -- podman_play - Add build and context_dir option to podman_play -- podman_pod - Add options for resource limits to podman_pod - -dellemc.enterprise_sonic -~~~~~~~~~~~~~~~~~~~~~~~~ - -- galaxy_yml - Enable installation of Ansible Netcomon versions after 5.0.0 and update the enterprise_sonic release version (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/270). -- module_utils - Change the location for importing remove_empties from the obsolete Netcommon location to the offically required Ansible library location to fix sanity errors (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/172). -- sonic_aaa - Add replaced and overridden states support for AAA resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/237). -- sonic_aaa - Add unit tests for AAA resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/198). -- sonic_aaa - Revert breaking changes for AAA nodule (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/269). -- sonic_api - Add unit tests for api resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/218). -- sonic_bfd, sonic_copp - Update replaced methods (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/254). -- sonic_bgp - Add rt_delay attribute to module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/244). -- sonic_bgp - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/240). -- sonic_bgp - Add unit tests for BGP resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/182). -- sonic_bgp_af - Add several attributes to support configuration of route distinguisher and route target (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/141). -- sonic_bgp_af - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/246). -- sonic_bgp_af - Add unit tests for BGP AF resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/183). -- sonic_bgp_af - Modify BGP AF resource module unit tests to adjust for changes in the resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/191). -- sonic_bgp_as_paths - Add unit tests for BGP AS paths resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/184). -- sonic_bgp_communities - Add unit tests for BGP communities resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/185). -- sonic_bgp_ext_communities - Add unit tests for BGP ext communities resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/186). -- sonic_bgp_neighbors - Add unit tests for BGP neighbors resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/187). -- sonic_bgp_neighbors - Enhance unit tests for BGP Neighbors resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/245). -- sonic_bgp_neighbors_af - Add unit tests for BGP neighbors AF resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/188). -- sonic_command - Add unit tests for command resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/219). -- sonic_config - Add unit tests for config resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/220). -- sonic_dhcp_relay - Add a common unit tests module and unit tests for dhcp relay module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/148). -- sonic_dhcp_relay - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/249). -- sonic_facts - Add unit tests for facts resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/222). -- sonic_interfaces - Add speed, auto-negotiate, advertised-speed and FEC to interface resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/128). -- sonic_interfaces - Add unit tests for interfaces resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/197). -- sonic_ip_neighbor - Add unit tests for IP neighbor resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/225). -- sonic_ip_neighbor - Change the replaced function in ip_neighbor resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/253). -- sonic_l2_interfaces - Add support for parsing configuration containing the OC Yang vlan range syntax (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/124). -- sonic_l2_interfaces - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/221). -- sonic_l2_interfaces - Add support for specifying vlan trunk ranges in Ansible playbooks (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/149). -- sonic_l2_interfaces - Add unit tests for l2_interfaces resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/200). -- sonic_l3_interfaces - Add unit tests for l3_interfaces resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/202). -- sonic_lag_interface - Add replaced and overridden states support for LAG interface resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/196). -- sonic_lag_interfaces - Add unit tests for lag_interfaces resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/203). -- sonic_logging - Add replaced and overridden states support for logging resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/150). -- sonic_logging - Add unit tests for logging resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/226). -- sonic_logging - Change logging get facts for source_interface naming (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/258). -- sonic_mclag - Add delay_restore, gateway_mac, and peer_gateway attributes to module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/145). -- sonic_ntp - Add prefer attribute to NTP resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/118). -- sonic_ntp - Add replaced and overridden states support for NTP resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/151). -- sonic_ntp - Add unit tests for NTP resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/207). -- sonic_ntp - Change NTP get facts to get default parameters (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/106). -- sonic_ntp - Change NTP key values in NTP regression test script (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/107). -- sonic_ntp - Change NTP module name (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/113). -- sonic_ntp - Change NTP module names in NTP regression test script (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/114). -- sonic_ntp - Change NTP resource module to make minpoll and maxpoll be configured together (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/129). -- sonic_port_breakout - Add unit tests for port breakout resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/229). -- sonic_port_group - Add replaced and overridden states support for port group resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/227). -- sonic_port_group - Add unit tests for port group resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/228). -- sonic_prefix_lists - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/255). -- sonic_prefix_lists - Add unit tests for prefix lists resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/209). -- sonic_radius_server - Add replaced and overridden states support for RADIUS server resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/239). -- sonic_radius_server - Add unit tests for RADIUS server resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/210). -- sonic_static_routes - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/236). -- sonic_static_routes - Add unit tests for static routes resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/212). -- sonic_system - Add replaced and overridden states support for system resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/159). -- sonic_system - Add unit tests for system resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/223). -- sonic_tacacs_server - Add replaced and overridden states support for TACACS server resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/235). -- sonic_tacacs_server - Add unit tests for TACACS server resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/208). -- sonic_users - Add replaced and overridden states support for users resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/242). -- sonic_users - Add unit tests for users resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/213). -- sonic_vlans - Add replaced and overridden states support for VLAN resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/217). -- sonic_vlans - Add unit tests for Vlans resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/214). -- sonic_vrfs - Add replaced and overridden states support for VRF resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/156). -- sonic_vrfs - Add unit tests for VRFS resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/216). -- sonic_vxlans - Add support for replaced and overridden states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/247). -- sonic_vxlans - Add unit tests for VxLans resource module (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/215). - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- All the module documentation and examples are updated to use true or false for Boolean values. -- Module ``idrac_user`` is enhanced to configure custom privileges for an user. -- Module ``ome_application_certificate`` is enhanced to support subject alternative names. -- Module ``ome_diagnostics`` is enhanced to update changed flag status in response. -- Module ``ome_discovery`` is enhanced to add detailed job information of each IP discovered. -- Module ``ome_firmware_baseline`` is enhanced to support the option to select only components with no reboot required. -- Module ``ome_firmware_catalog`` is enhanced to support IPv6 address. -- Module ``ome_firmware`` is enhanced to support reboot type options. -- Module ``ome_job_info`` is enhanced to return last execution details and execution histories. -- Module ``redfish_firmware`` is enhanced to support IPv6 address. -- Module ``redfish_storage_volume`` is enhanced to support RAID6 and RAID60. -- Role ``idrac_os_deployment`` is enhanced to remove the auto installation of required libraries and to support custom ISO and kickstart file as input. -- Updated the idrac_gather_facts role to use jinja template filters. - -dellemc.powerflex -~~~~~~~~~~~~~~~~~ - -- Added Ansible role to support creation and deletion of protection domain, storage pool and fault set. -- Added Ansible role to support installation and uninstallation of Active MQ. -- Added Ansible role to support installation and uninstallation of Gateway. -- Added Ansible role to support installation and uninstallation of LIA. -- Added Ansible role to support installation and uninstallation of MDM. -- Added Ansible role to support installation and uninstallation of SDC. -- Added Ansible role to support installation and uninstallation of SDR. -- Added Ansible role to support installation and uninstallation of SDS. -- Added Ansible role to support installation and uninstallation of TB. -- Added Ansible role to support installation and uninstallation of Web UI. -- Added sample playbooks for the modules. -- Added support for PowerFlex Denver version(4.5.x) -- Added support for SDC installation on ESXi, Rocky Linux and Windows OS. -- Device module is enhanced to support force addition of device to the SDS. -- Info module is enhanced to list statistics in snapshot policies. -- Replication consistency group module is enhanced to support failover, restore, reverse, switchover, and sync operations. -- SDC module is enhanced to configure performance profile and to remove SDC. -- Updated modules to adhere with ansible community guidelines. - -dellemc.unity -~~~~~~~~~~~~~ - -- Added replication session module to get details, pause, resume, sync, failover, failback and delete replication sessions. -- Added support for Unity XT SeaHawk 5.3 -- Documentation updates for boolean values based on ansible community guidelines. -- Patch update to fix import errors in utils file. - -f5networks.f5_modules -~~~~~~~~~~~~~~~~~~~~~ - -- bigip_command - Added note to give appropriate timeout value for long running commands -- bigip_policy_rule - added six more options for ssl_extension condition - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- Corrected the behavior of module fmgr_pkg_firewall_consolidated_policy_sectionvalue and fmgr_pkg_firewall_securitypolicy_sectionvalue. -- Improve documentation. -- Some arguments can support both list or string format input now. -- Support newest versions for FortiManager v6.2 ~ v7.4 - -google.cloud -~~~~~~~~~~~~ - -- Add DataPlane V2 Support. -- Add auth support for GCP access tokens (#574). -- Add support for ip_allocation_policy->stack_type. - -grafana.grafana -~~~~~~~~~~~~~~~ - -- Ability to configure date format in grafana server role by @RomainMou -- Add Grafana Agent Version and CPU Arch to Downloaded ZIP in Grafana Agent Role -- Add check for Curl and failure step if Agent Version is not retrieved -- Add overrides.conf with CAP_NET_BIND_SERVICE for grafana-server unit -- Allow alert resource provisioning in Grafana Role -- Avoid using shell for fetching latest version in Grafana Agent Role by @gardar -- Bump cryptography from 39.0.2 to 41.0.3 -- Bump cryptography from 41.0.3 to 41.0.4 -- Bump semver from 5.7.1 to 5.7.2 -- Bump word-wrap from 1.2.3 to 1.2.5 -- Create local dashboard directory in check mode -- Create missing notification directory in Grafana Role -- Datasource test updates and minor fixes -- Fix Deleting datasources -- Fix Grafana Dashboard Import for Grafana Role -- Fix alert_notification_policy failing on fresh instance -- Fix for invalid yaml with datasources list enclosed in quotes by @elkozmon -- Fix grafana dashboard import in Grafana Role -- Make grafana_agent Idempotent -- Making Deleting folders idempotent -- Move _grafana_agent_base_download_url from /vars to /defaults in Grafana Agent Role -- Provisioning errors in YAML -- Remove agent installation custom check by @VLZZZ -- Remove check_mode from create local directory task in Grafana Role -- Remove dependency on local-fs.target from Grafana Agent role -- Remove explicit user creation check by @v-zhuravlev -- Remove trailing slash automatically from grafana_url -- Update CI Testing -- Update Cloud Stack Module failures -- Update Download tasks in Grafana Agent Role -- Use 'ansible_system' env variable to detect os typ in Grafana Agent Role -- Use new standard to configure Grafana APT source for Grafana Role -- YAML Fixes -- hange grafana Agent Wal and Positions Directory in Grafana Agent Role -- indentation and Lint fixes to modules - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- Bundle hcloud python dependency inside the collection. -- Use the collection version in the hcloud user-agent instead of the ansible-core version. -- hcloud_datacenter_info - Add `server_types` field -- hcloud_floating_ip_info - Allow querying floating ip by name. -- hcloud_iso_info - Add deprecation field -- hcloud_iso_info Create hcloud_iso_info module -- hcloud_load_balancer_info - Add targets health status field. -- hcloud_load_balancer_network - Allow selecting a `load_balancer` or `network` using its ID. -- hcloud_load_balancer_service - Allow selecting a `load_balancer` using its ID. -- hcloud_load_balancer_target - Allow selecting a `load_balancer` or `server` using its ID. -- hcloud_network Add expose_routes_to_vswitch field. -- hcloud_network_info Return expose_routes_to_vswitch for network. -- hcloud_primary_ip_info Create hcloud_primary_ip_info module -- hcloud_rdns - Allow selecting a `server`, `floating_ip`, `primary_ip` or `load_balancer` using its ID. -- hcloud_route - Allow selecting a `network` using its ID. -- hcloud_server - Add `created` field -- hcloud_server Show warning if used server_type is deprecated. -- hcloud_server_info - Add `created` field -- hcloud_server_network - Allow selecting a `network` or `server` using its ID. -- hcloud_server_type_info - Add field included_traffic to returned server types -- hcloud_server_type_info Return deprecation info for server types. -- hcloud_subnetwork - Allow selecting to a `network` using its ID. -- inventory - Allow caching the hcloud inventory. -- python-dateutil >= 2.7.5 is now required by the collection. If you already have the hcloud package installed, this dependency should also be installed. -- requests >= 2.20 is now required by the collection. If you already have the hcloud package installed, this dependency should also be installed. - -inspur.ispim -~~~~~~~~~~~~ - -- Change the ansible-test.yml application file version. -- Modify logical disk creation, add MV raid card compatible. -- The edit_bios module adds the list field. - -junipernetworks.junos -~~~~~~~~~~~~~~~~~~~~~ - -- `junos_ospfv2` - Fix the authentication config when password is configured -- `junos_ospfv2` - Rename key ospf to ospfv2 in facts. -- `junos_ospfv2` - add area_ranges attribute which supports list of dict attributes. -- `junos_ospfv2` - add attributes `allow_route_leaking`, `stub_network` and `as-external` to overload dict. -- `junos_ospfv2` - add attributes `no_ignore_out_externals` to spf_options dict. -- `junos_ospfv2` - fix to gather reference_bandwidth and rfc1583compatibility. -- add acl_interfaces key for junos_facts output. -- add overridden state opperation support. - -lowlydba.sqlserver -~~~~~~~~~~~~~~~~~~ - -- Add refresh workaround for agent schedule bug where properties returned are stale. (https://github.com/lowlydba/lowlydba.sqlserver/pull/185) -- Added SID as an optional parameter to the login module (https://github.com/lowlydba/lowlydba.sqlserver/pull/189) -- Added only_accessible as an optional parameter to the database module (https://github.com/lowlydba/lowlydba.sqlserver/pull/198) -- Fixes error handling for Remove-DbaDatabase when joined to AvailabilityGroup, exception was not being thrown so we have to parse Status - -microsoft.ad -~~~~~~~~~~~~ - -- AD objects will no longer be moved to the default AD path for their type if no ``path`` was specified. Use the value ``microsoft.ad.default_path`` to explicitly set the path to the default path if that behaviour is desired. -- microsoft.ad.debug_ldap_client - Add ``dpapi_ng`` to list of packages checked -- microsoft.ad.ldap - Add support for decrypting LAPS encrypted password -- microsoft.ad.ldap - Added the option ``filter_without_computer`` to not add the AND clause ``objectClass=computer`` to the final filter used - https://github.com/ansible-collections/microsoft.ad/issues/55 -- microsoft.ad.ldap - Allow setting LDAP connection and authentication options through environment variables - https://github.com/ansible-collections/microsoft.ad/issues/34 - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_broadcast_domain - changed documentation for ipspace as it is required while using REST. -- na_ontap_cg_snapshot - added REST support to the cg snapshot module, requires ONTAP 9.10.1 or later. -- na_ontap_cifs_server - new option `default_site` added in REST, requires ONTAP 9.13.1 or later. -- na_ontap_ems_destination - new option ``certificate``, ``ca`` added. -- na_ontap_kerberos_realm - add REST support for `admin_server_ip`, `admin_server_port`, `pw_server_ip`, `pw_server_port` and `clock_skew` from ONTAP 9.13.1 or later -- na_ontap_lun - new option `qtree_name` added in REST. -- na_ontap_name_mappings - added choices ``s3_win`` and ``s3_unix`` to ``direction``, requires ONTAP 9.12.1 or later. -- na_ontap_net_ifgrp - return `name` and other details of a newly created interface group in module output in REST. -- na_ontap_qos_policy_group - added new REST only options `expected_iops_allocation` and `peak_iops_allocation`, requires ONTAP 9.10.1 or later. -- na_ontap_rest_info - new option `hal_linking` added to enable or disable HAL links. -- na_ontap_restit - returns changed as False for GET method. -- na_ontap_s3_buckets - new option ``nas_path`` added, requires ONTAP 9.12.1 or later. -- na_ontap_snmp - added REST support for snmpv3 user. -- na_ontap_user - Added warning message when password is not changed. -- na_ontap_volume - added REST support for `atime_update` requires ONTAP 9.8 or later, `snapdir_access` and `snapshot_auto_delete` requires ONTAP 9.13.1 or later. -- na_ontap_volume - added new REST only options `vol_nearly_full_threshold_percent` and `vol_full_threshold_percent`, requires ONTAP 9.9 or later. - -netbox.netbox -~~~~~~~~~~~~~ - -- API - Add possibility to use Bearer token [#1023](https://github.com/netbox-community/ansible_modules/pull/1023) -- custom fields - Add datetime as an custom field option [#1019](https://github.com/netbox-community/ansible_modules/pull/1019) -- netbox_cable - Add tenant [#1027](https://github.com/netbox-community/ansible_modules/pull/1027) -- netbox_circuit_type, netbox_device_interface - Add missing options [#1025](https://github.com/netbox-community/ansible_modules/pull/1025) -- netbox_config_template - New module [#1090](https://github.com/netbox-community/ansible_modules/pull/1090) -- netbox_custom_field - Add hidden-ifunset option [#1048](https://github.com/netbox-community/ansible_modules/pull/1048) -- netbox_device - Add oob_ip to device [#1085](https://github.com/netbox-community/ansible_modules/pull/1085) -- netbox_device_type - Add default_platform [#1092](https://github.com/netbox-community/ansible_modules/pull/1092) -- netbox_inventory_item - Add role to module [#1050](https://github.com/netbox-community/ansible_modules/pull/1050) -- netbox_power_port - Add missing power port option [#1049](https://github.com/netbox-community/ansible_modules/pull/1049) - -ovirt.ovirt -~~~~~~~~~~~ - -- ovirt_vm - Add tpm_enabled (https://github.com/oVirt/ovirt-ansible-collection/pull/722). -- storage_error_resume_behaviour - Support VM storage error resume behaviour "auto_resume", "kill", "leave_paused". (https://github.com/oVirt/ovirt-ansible-collection/pull/721) -- vm_infra - Support boot disk renaming and resizing. (https://github.com/oVirt/ovirt-ansible-collection/pull/705) - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purefa_eradication - Added support for disabled and enabled timers from Purity//FA 6.4.10 -- purefa_info - Add `port_connectivity` information for hosts -- purefa_info - Add array subscription data -- purefa_info - Add promotion status information for volumes -- purefa_info - Added `nfs_version` to policies and rules from Purity//FA 6.4.10 -- purefa_info - Added `total_used` to multiple sections from Purity//FA 6.4.10 -- purefa_info - Added support for autodir policies -- purefa_info - Prive array timezone from Purity//FA 6.4.10 -- purefa_info - Report NTP Symmetric key presence from Purity//FA 6.4.10 -- purefa_network - Add support for creating/modifying VIF and LACP_BOND interfaces -- purefa_network - `enabled` option added. This must now be used instead of state=absent to disable a physical interface as state=absent can now fully delete a non-physical interface -- purefa_ntp - Added support for NTP Symmetric Key from Purity//FA 6.4.10s -- purefa_offload - Added a new profile parameter. -- purefa_pgsched - Change `snap_at` and `replicate_at` to be AM or PM hourly -- purefa_pgsnap - Add protection group snapshot rename functionality -- purefa_pgsnap - Added new parameter to support snapshot throttling -- purefa_policy - Added support for autodir policies -- purefa_policy - Added support for multiple NFS versions from Purity//FA 6.4.10 -- purefa_proxy - Add new protocol parameter, defaults to https -- purefa_snap - Added new parameter to support snapshot throttling -- purefa_vg - Add rename parameter - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purefb_bucket_replica - Added support for cascading replica links -- purefb_fs - Added support for SMB client and share policies -- purefb_fs_replica - Added support to delete filesystem replica links from REST 2.10 -- purefb_info - Add drive type in drives subset for //S and //E platforms. Only available from REST 2.9. -- purefb_info - Added support for SMB client and share policies -- purefb_info - New fields to display free space (remaining quota) for Accounts and Buckets. Space used by destroyed buckets is split out from virtual field to new destroyed_virtual field -- purefb_info - Report encryption state in SMB client policy rules -- purefb_info - Report more detailed space data from Purity//FB 4.3.0 -- purefb_policy - Add deny effect for object store policy rules. Requires Purity//FB 4.3.0+ -- purefb_policy - Add new and updated policy access rights -- purefb_policy - Added parameter to define object store policy description -- purefb_policy - Added support for SMB client and share policies -- purefb_s3acc - Allow human readable quota sizes; eg. 1T, 230K, etc -- purefb_s3user - Add new boolean parameter I(multiple_keys) to limit access keys for a user to a single key. - -purestorage.fusion -~~~~~~~~~~~~~~~~~~ - -- FUSION_API_HOST && FUSION_HOST - changed logic, now this variables require host name without path -- Fusion authentication - add 'access_token' module's parameter and 'FUSION_ACCESS_TOKEN' environment variable, as an alternative way of the authentication. -- all modules - return resource's id parameter on update and create. -- fusion - added private key password, which is used to decrypt private key files -- fusion_array - added `apartment_id` argument, which can be used when creating an array. -- fusion_info - `array` is None if missing in `volume` -- fusion_info - `hardware_types` is None if missing in `storage_service` -- fusion_info - `network_interface_groups` is None if missing in `iscsi_interfaces` in `storage_endpoint` -- fusion_info - introduce 'availability_zones' subset option -- fusion_info - introduce 'host_access_policies' subset option -- fusion_info - introduce 'network_interfaces' subset option -- fusion_info - introduce 'regions' subset option -- fusion_info - rename 'appliances' in default dict to 'arrays' for consistency -- fusion_info - rename 'hosts' dict to 'host_access_policies' for consistency -- fusion_info - rename 'interfaces' dict to 'network_interfaces' for consistency -- fusion_info - rename 'placements_groups' in default dict to 'placement_groups' for consistency -- fusion_info - rename 'zones' dict to 'availability_zones' for consistency -- fusion_info - rename hardware to hardware_types in response for consistency -- fusion_info - rename storageclass to storage_classes in response for consistency -- fusion_pg - introduced `destroy_snapshots_on_delete` which, if set to true, ensures that before deleting placement group, snapshots within the placement group will be deleted. -- fusion_pp - 'local_rpo' duration parsing documented, 'local_retention' minimum value fixed -- fusion_pp - Allow leading zeros in duration strings -- fusion_pp - Change the minimum value of the protection policy local retention from 1 to 10 -- fusion_pp - duration parsing improved. Supports combination of time units (E.g 5H5M) -- fusion_pp - introduced `destroy_snapshots_on_delete` which, if set to true, ensures that before deleting protection policy, snapshots within the protection policy will be deleted. -- fusion_ra - added `api_client_key` argument, which can be used instead of `user` and `principal` argument -- fusion_ra - added `principal` argument, which is an ID of either API client or User and can be used instead of `user` argument -- fusion_se - add support for CBS Storage Endpoint -- fusion_volume - Allow creating a new volume from already existing volume or volume snapshot - -sensu.sensu_go -~~~~~~~~~~~~~~ - -- Added Docker file configurations for Ubuntu 20.04 and 22.04 -- Added aditional parameters for Postgres resource to datastore module -- Added bcrypt check to user module -- Added docs for backends and package_name filter -- Added symlink for AlmaLinux.yml for alma linux 9 support - -t_systems_mms.icinga_director -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- Add Icinga Deploy handler and module (https://github.com/T-Systems-MMS/ansible-collection-icinga-director/pull/205) - -theforeman.foreman -~~~~~~~~~~~~~~~~~~ - -- compute_resource - add support for OpenStack -- content_view_filter - add deb filter type -- content_view_filter_rule - add spec for deb filter rules -- content_view_promote role - also accept all parameters of the `content_view_version` module (https://github.com/theforeman/foreman-ansible-modules/issues/1591) -- content_view_version - include information about the published version in the return value of the module -- job-invocation - add ``recurrence purpose`` and ``description_format`` parameters -- locations role - New role to manage locations -- organizations role - accept ``parameters`` and ``ignore_types`` like the module does -- repositories role - allow disabling/removing of repositories by setting the ``state`` parameter - -vultr.cloud -~~~~~~~~~~~ - -- instance - Implemented a new ``state`` equal ``reinstalled`` to reinstall an existing instance (https://github.com/vultr/ansible-collection-vultr/pull/66). -- inventory - Added VPC/VPC 2.0 support by adding ``internal_ip`` to the attributes (https://github.com/vultr/ansible-collection-vultr/issues/86). -- inventory - Bare metal support has been implemented (https://github.com/vultr/ansible-collection-vultr/pull/63). - -vyos.vyos -~~~~~~~~~ - -- vyos-l3_interface_support - Add support for Tunnel, Bridge and Dummy interfaces. (https://github.com/ansible-collections/vyos.vyos/issues/265) - -Breaking Changes / Porting Guide --------------------------------- - -Ansible-core -~~~~~~~~~~~~ - -- Any plugin using the config system and the `cli` entry to use the `timeout` from the command line, will see the value change if the use had configured it in any of the lower precedence methods. If relying on this behaviour to consume the global/generic timeout from the DEFAULT_TIMEOUT constant, please consult the documentation on plugin configuration to add the overlaping entries. -- ansible-test - Test plugins that rely on containers no longer support reusing running containers. The previous behavior was an undocumented, untested feature. -- service module will not permanently configure variables/flags for openbsd when doing enable/disable operation anymore, this module was never meant to do this type of work, just to manage the service state itself. A rcctl_config or similar module should be created and used instead. - -amazon.aws -~~~~~~~~~~ - -- The amazon.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). -- amazon.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). -- module_utils - ``module_utils.urls`` was previously deprecated and has been removed (https://github.com/ansible-collections/amazon.aws/pull/1540). -- module_utils._version - vendored copy of distutils.version has been dropped (https://github.com/ansible-collections/amazon.aws/pull/1587). - -community.aws -~~~~~~~~~~~~~ - -- 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 - 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``. - -community.general -~~~~~~~~~~~~~~~~~ - -- collection_version lookup plugin - remove compatibility code for ansible-base 2.10 and ansible-core 2.11 (https://github.com/ansible-collections/community.general/pull/7269). -- gitlab_project - add ``default_branch`` support for project update. If you used the module so far with ``default_branch`` to update a project, the value of ``default_branch`` was ignored. Make sure that you either do not pass a value if you are not sure whether it is the one you want to have to avoid unexpected breaking changes (https://github.com/ansible-collections/community.general/pull/7158). -- selective callback plugin - remove compatibility code for Ansible 2.9 and ansible-core 2.10 (https://github.com/ansible-collections/community.general/pull/7269). -- vardict module utils - ``VarDict`` will no longer accept variables named ``_var``, ``get_meta``, and ``as_dict`` (https://github.com/ansible-collections/community.general/pull/6647). -- version module util - remove fallback for ansible-core 2.11. All modules and plugins that do version collections no longer work with ansible-core 2.11 (https://github.com/ansible-collections/community.general/pull/7269). - -community.hashi_vault -~~~~~~~~~~~~~~~~~~~~~ - -- The minimum required version of ``hvac`` is now ``1.2.1`` (https://docs.ansible.com/ansible/devel/collections/community/hashi_vault/docsite/user_guide.html#hvac-version-specifics). - -community.vmware -~~~~~~~~~~~~~~~~ - -- Removed support for ansible-core version < 2.15.0. -- vmware_dvs_host - removed defaults for `vmnics` and `lag_uplinks` (https://github.com/ansible-collections/community.vmware/issues/1516). -- vmware_host_acceptance - removed `acceptance_level` and used its options in `state`. This also means there will be no state `list` anymore. In order to get information about the current acceptance level, use the new module `vmware_host_acceptance_info` (https://github.com/ansible-collections/community.vmware/issues/1872). -- vmware_vm_info - added prefix length to IP addresses in vm_network, so they now show up as for example 10.76.33.228/24 instead of just 10.76.33.228 (https://github.com/ansible-collections/community.vmware/issues/1761). - -dellemc.enterprise_sonic -~~~~~~~~~~~~~~~~~~~~~~~~ - -- sonic_aaa - Add default_auth attribute to the argspec to replace the deleted group and local attributes. This change allows for ordered login authentication. (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/195). - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- Drop support for ansible-core 2.12 -- Drop support for python 3.7 -- hcloud-python 1.20.0 is now required for full compatibility -- inventory plugin - Don't set the server image variables (`image_id`, `image_os_flavor` and `image_name`) when the server image is not defined. - -Deprecated Features -------------------- - -- The ``community.azure`` collection is officially unmaintained and has been archived. Therefore, it will be removed from Ansible 10. There is already a successor collection ``azure.azcollection`` in the community package which should cover the same functionality (https://github.com/ansible-community/community-topics/issues/263). -- The ``hpe.nimble`` collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10. See `the removal process for details on how this works `__ (https://github.com/ansible-community/community-topics/issues/254). -- The collection ``community.sap`` has been renamed to ``community.sap_libs``. For now both collections are included in Ansible. The content in ``community.sap`` has deprecated redirects to the new collection in Ansible 9.0.0, and the collection will be removed from Ansible 10 completely. Please update your FQCNs for ``community.sap``. -- The collection ``ibm.spectrum_virtualize`` has been renamed to ``ibm.storage_virtualize``. For now, both collections are included in Ansible. The content in ``ibm.spectrum_virtualize`` will be replaced with deprecated redirects to the new collection in Ansible 10.0.0, and these redirects will eventually be removed from Ansible. Please update your FQCNs for ``ibm.spectrum_virtualize``. -- The collection ``t_systems_mms.icinga_director`` has been renamed to ``telekom_mms.icinga_director``. For now both collections are included in Ansible. The content in ``t_systems_mms.icinga_director`` has been replaced with deprecated redirects to the new collection in Ansible 9.0.0, and these redirects will be removed from Ansible 11. Please update your FQCNs for ``t_systems_mms.icinga_director``. -- The netapp.azure collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10. See `the removal process for details on how this works `__ (https://github.com/ansible-community/community-topics/issues/234). -- The netapp.elementsw collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10. See `the removal process for details on how this works `__ (https://github.com/ansible-community/community-topics/issues/235). -- The netapp.um_info collection is considered unmaintained and will be removed from Ansible 10 if no one starts maintaining it again before Ansible 10. See `the removal process for details on how this works `__ (https://github.com/ansible-community/community-topics/issues/244). - -Ansible-core -~~~~~~~~~~~~ - -- Deprecated ini config option ``collections_paths``, use the singular form ``collections_path`` instead -- Deprecated the env var ``ANSIBLE_COLLECTIONS_PATHS``, use the singular form ``ANSIBLE_COLLECTIONS_PATH`` instead -- Old style vars plugins which use the entrypoints `get_host_vars` or `get_group_vars` are deprecated. The plugin should be updated to inherit from `BaseVarsPlugin` and define a `get_vars` method as the entrypoint. -- Support for Windows Server 2012 and 2012 R2 has been removed as the support end of life from Microsoft is October 10th 2023. These versions of Windows will no longer be tested in this Ansible release and it cannot be guaranteed that they will continue to work going forward. -- ``STRING_CONVERSION_ACTION`` config option is deprecated as it is no longer used in the Ansible Core code base. -- the 'smart' option for setting a connection plugin is being removed as its main purpose (choosing between ssh and paramiko) is now irrelevant. -- vault and unfault filters - the undocumented ``vaultid`` parameter is deprecated and will be removed in ansible-core 2.20. Use ``vault_id`` instead. -- yum_repository - deprecated parameter 'keepcache' (https://github.com/ansible/ansible/issues/78693). - -amazon.aws -~~~~~~~~~~ - -- ec2_instance - deprecation of ``tenancy`` and ``placement_group`` in favor of ``placement`` attribute (https://github.com/ansible-collections/amazon.aws/pull/1825). -- s3_object - support for passing object keys with a leading ``/`` has been deprecated and will be removed in a release after 2025-12-01 (https://github.com/ansible-collections/amazon.aws/pull/1549). - -ansible.netcommon -~~~~~~~~~~~~~~~~~ - -- libssh - the ssh_*_args options are now marked that they will be removed after 2026-01-01. - -ansible.windows -~~~~~~~~~~~~~~~ - -- Add warning when using Server 2012 or 2012 R2 with the ``setup`` module. These OS' are nearing the End of Life and will not be tested in CI when that time is reached. -- win_domain - Module is deprecated in favour of the ``microsoft.ad.domain`` module, the ``ansible.windows.win_domain`` module will be removed in the ``3.0.0`` release of this collection. -- win_domain_controller - Module is deprecated in favour of the ``microsoft.ad.domain_controller`` module, the ``ansible.windows.win_domain_controller`` module will be removed in the ``3.0.0`` release of this collection. -- win_domain_membership - Module is deprecated in favour of the ``microsoft.ad.membership`` module, the ``ansible.windows.win_domain_membership`` module will be removed in the ``3.0.0`` release of this collection. - -cisco.ios -~~~~~~~~~ - -- ios_snmp_server - deprecate traps.envmon.fan with traps.envmon.fan_enable -- ios_snmp_server - deprecate traps.mpls_vpn with traps.mpls -- ospfv2 - removed passive_interface to passive_interfaces that supports a list of interfaces - -cisco.iosxr -~~~~~~~~~~~ - -- Deprecated iosxr_bgp module in favor of iosxr_bgp_global,iosxr_bgp_neighbor_address_family and iosxr_bgp_address_family. -- iosxr_l2_interfaces - deprecate q_vlan with qvlan which allows vlans in str format e.g "any" - -community.ciscosmb -~~~~~~~~~~~~~~~~~~ - -- support for Python 2.6 nad 2.7 -- support for ansible 2.9 - -community.crypto -~~~~~~~~~~~~~~~~ - -- get_certificate - the default ``false`` of the ``asn1_base64`` option is deprecated and will change to ``true`` in community.crypto 3.0.0 (https://github.com/ansible-collections/community.crypto/pull/600). - -community.general -~~~~~~~~~~~~~~~~~ - -- CmdRunner module utils - deprecate ``cmd_runner_fmt.as_default_type()`` formatter (https://github.com/ansible-collections/community.general/pull/6601). -- MH VarsMixin module utils - deprecates ``VarsMixin`` and supporting classes in favor of plain ``vardict`` module util (https://github.com/ansible-collections/community.general/pull/6649). -- The next major release, community.general 8.0.0, will drop support for ansible-core 2.11 and 2.12, which have been End of Life for some time now. This means that this collection no longer supports Python 2.6 on the target. Individual content might still work with unsupported ansible-core versions, but that can change at any time. Also please note that from now on, for every new major community.general release, we will drop support for all ansible-core versions that have been End of Life for more than a few weeks on the date of the major release (https://github.com/ansible-community/community-topics/discussions/271, https://github.com/ansible-collections/community.general/pull/7259). -- ansible_galaxy_install - the ``ack_ansible29`` and ``ack_min_ansiblecore211`` options have been deprecated and will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/7358). -- consul - the ``ack_params_state_absent`` option has been deprecated and will be removed in community.general 10.0.0 (https://github.com/ansible-collections/community.general/pull/7358). -- cpanm - value ``compatibility`` is deprecated as default for parameter ``mode`` (https://github.com/ansible-collections/community.general/pull/6512). -- ejabberd_user - deprecate the parameter ``logging`` in favour of producing more detailed information in the module output (https://github.com/ansible-collections/community.general/pull/7043). -- flowdock - module relies entirely on no longer responsive API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6930). -- proxmox - old feature flag ``proxmox_default_behavior`` will be removed in community.general 10.0.0 (https://github.com/ansible-collections/community.general/pull/6836). -- proxmox_kvm - deprecate the option ``proxmox_default_behavior`` (https://github.com/ansible-collections/community.general/pull/7377). -- redfish_info, redfish_config, redfish_command - the default value ``10`` for the ``timeout`` option is deprecated and will change to ``60`` in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/7295). -- redhat module utils - the ``module_utils.redhat`` module is deprecated, as - effectively unused: the ``Rhsm``, ``RhsmPool``, and ``RhsmPools`` classes - will be removed in community.general 9.0.0; the ``RegistrationBase`` class - will be removed in community.general 10.0.0 together with the - ``rhn_register`` module, as it is the only user of this class; this means - that the whole ``module_utils.redhat`` module will be dropped in - community.general 10.0.0, so importing it without even using anything of it - will fail - (https://github.com/ansible-collections/community.general/pull/6663). -- redhat_subscription - the ``autosubscribe`` alias for the ``auto_attach`` option has been - deprecated for many years, although only in the documentation. Officially mark this alias - as deprecated, and it will be removed in community.general 9.0.0 - (https://github.com/ansible-collections/community.general/pull/6646). -- redhat_subscription - the ``pool`` option is deprecated in favour of the - more precise and flexible ``pool_ids`` option - (https://github.com/ansible-collections/community.general/pull/6650). -- rhsm_repository - ``state=present`` has not been working as expected for many years, - and it seems it was not noticed so far; also, "presence" is not really a valid concept - for subscription repositories, which can only be enabled or disabled. Hence, mark the - ``present`` and ``absent`` values of the ``state`` option as deprecated, slating them - for removal in community.general 10.0.0 - (https://github.com/ansible-collections/community.general/pull/6673). -- stackdriver - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6887). -- webfaction_app - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909). -- webfaction_db - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909). -- webfaction_domain - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909). -- webfaction_mailbox - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909). -- webfaction_site - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909). - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- postgresql_lang - the module has been deprecated and will be removed in ``community.postgresql 4.0.0``. Please use the ``postgresql_ext`` module instead (https://github.com/ansible-collections/community.postgresql/issues/559). - -community.sap -~~~~~~~~~~~~~ - -- community.sap.hana_query - is deprecated in favor of community.sap_libs.sap_hdbsql -- community.sap.sap_company - is deprecated in favor of community.sap_libs.sap_company -- community.sap.sap_snote - is deprecated in favor of community.sap_libs.sap_snote -- community.sap.sap_task_list_execute - is deprecated in favor of community.sap_libs.sap_task_list_execute -- community.sap.sap_user - is deprecated in favor of community.sap_libs.sap_user -- community.sap.sapcar_extract - is deprecated in favor of community.sap_libs.sapcar_extract - -community.windows -~~~~~~~~~~~~~~~~~ - -- win_domain_computer - Module is deprecated in favour of the ``microsoft.ad.computer`` module, the ``community.windows.win_domain_computer`` module will be removed in the ``3.0.0`` release of this collection. -- win_domain_group - Module is deprecated in favour of the ``microsoft.ad.group`` module, the ``community.windows.win_domain_group`` module will be removed in the ``3.0.0`` release of this collection. -- win_domain_group_membership - Module is deprecated in favour of the ``microsoft.ad.group`` module, the ``community.windows.win_domain_group_membership`` module will be removed in the ``3.0.0`` release of this collection. -- win_domain_object_info - Module is deprecated in favour of the ``microsoft.ad.object_info`` module, the ``community.windows.win_domain_object_info`` module will be removed in the ``3.0.0`` release of this collection. -- win_domain_ou - Module is deprecated in favour of the ``microsoft.ad.ou`` module, the ``community.windows.win_domain_ou`` module will be removed in the ``3.0.0`` release of this collection. -- win_domain_user - Module is deprecated in favour of the ``microsoft.ad.user`` module, the ``community.windows.win_domain_user`` module will be removed in the ``3.0.0`` release of this collection. - -junipernetworks.junos -~~~~~~~~~~~~~~~~~~~~~ - -- `junos_ospfv2` - add deprecate warning for area_range. -- add deprecate warning for junos_acl_interfaces key for junos facts results. - -microsoft.ad -~~~~~~~~~~~~ - -- Deprecating support for Server 2012 and Server 2012 R2. These OS versions are reaching End of Life status from Microsoft and support for using them in Ansible are nearing its end. - -purestorage.fusion -~~~~~~~~~~~~~~~~~~ - -- fusion_api_client - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_array - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_az - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_hap - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_hap - parameters `nqn`, `wwns`, `host_password`, `host_user`, `target_password`and `target_user` were deprecated -- fusion_hw - FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_info - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_info - 'hosts' subset is deprecated in favor of 'host_access_policies' and will be removed in the version 2.0.0 -- fusion_info - 'interfaces' subset is deprecated in favor of 'network_interfaces' and will be removed in the version 2.0.0 -- fusion_info - 'zones' subset is deprecated in favor of 'availability_zones' and will be removed in the version 2.0.0 -- fusion_ni - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_nig - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_pg - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_pp - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_ra - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_region - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_sc - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_se - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_se - `endpoint_type` parameter is now deprecated and will be removed in version 2.0.0 -- fusion_ss - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_tenant - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_tn - FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_ts - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 -- fusion_volume - 'app_id' and 'key_file' parameters are deprecated in favor of 'issuer_id' and 'private_key_file' parameters and will be removed in the version 2.0.0, FUSION_APP_ID and FUSION_HOST env variables are deprecated in favor of FUSION_ISSUER_ID and FUSION_HOST and will be removed in the version 2.0.0 - -t_systems_mms.icinga_director -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- All modules and plugins are moved to the new namespace telekom_mms. Please update your code accordingly. - -Removed Features (previously deprecated) ----------------------------------------- - -- The deprecated servicenow.servicenow collection has been removed from Ansible 7, but accidentally re-added to Ansible 8. It has been removed again from Ansible 9 (https://github.com/ansible-community/community-topics/issues/246). -- The ngine_io.vultr collection has been removed from Ansible 9, because it is officially unmaintained and has been archived. The successor collection ``vultr.cloud`` (using the recent v2 Vultr API) covers the same functionality but might not have compatible syntax (https://github.com/ansible-community/community-topics/issues/257). -- ``cisco.nso`` was considered unmaintained and removed from Ansible 9 as per the `removal from Ansible process `_. Users can still install this collection with ``ansible-galaxy collection install cisco.nso``. -- ``community.fortios`` was considered unmaintained and removed from Ansible 9 as per the `removal from Ansible process `_. Users can still install this collection with ``ansible-galaxy collection install community.fortios``. -- ``community.google`` was considered unmaintained and removed from Ansible 9 as per the `removal from Ansible process `_. Users can still install this collection with ``ansible-galaxy collection install community.google``. -- ``community.skydive`` was considered unmaintained and removed from Ansible 9 as per the `removal from Ansible process `_. Users can still install this collection with ``ansible-galaxy collection install community.skydive``. - -Ansible-core -~~~~~~~~~~~~ - -- ActionBase - remove deprecated ``_remote_checksum`` method -- PlayIterator - remove deprecated ``cache_block_tasks`` and ``get_original_task`` methods -- Remove deprecated ``FileLock`` class -- Removed Python 3.9 as a supported version on the controller. Python 3.10 or newer is required. -- Removed ``include`` which has been deprecated in Ansible 2.12. Use ``include_tasks`` or ``import_tasks`` instead. -- ``Templar`` - remove deprecated ``shared_loader_obj`` parameter of ``__init__`` -- ``fetch_url`` - remove auto disabling ``decompress`` when gzip is not available -- ``get_action_args_with_defaults`` - remove deprecated ``redirected_names`` method parameter -- ansible-test - Removed support for the remote Windows targets 2012 and 2012-R2 -- inventory_cache - remove deprecated ``default.fact_caching_prefix`` ini configuration option, use ``defaults.fact_caching_prefix`` instead. -- module_utils/basic.py - Removed Python 3.5 as a supported remote version. Python 2.7 or Python 3.6+ is now required. -- stat - removed unused `get_md5` parameter. - -ansible.windows -~~~~~~~~~~~~~~~ - -- win_get_url - Removed the deprecated option alias ``passwordd``, use ``url_password`` instead. -- win_get_url - Removed the deprecated option alias ``user`` and ``username``, use ``url_username`` instead. -- win_package - Removed deprecated module option ``ensure``, use ``state`` instead. -- win_package - Removed deprecated module option ``productid``, use ``product_id`` instead. -- win_package - Removed deprecated module option ``username``, ``user_name``, ``password``, and ``user_password``. Use ``become`` with ``become_flags: logon_type=new_credentials logon_flags=netcredentials_only`` on the task instead to replicate the same functionality instead. -- win_reboot - Removed backwards compatibility check where ``ignore_errors: true`` will be treated like ``ignore_unreachable: true``. Going forward ``ignore_errors: true`` will only ignore errors the plugin encountered and not an unreachable host. Use ``ignore_unreachable: true`` to ignore that error like any other module. -- win_regedit - Removed support for using a ``path`` with forward slashes as a key separator. Using a forward slash has been deprecated since Ansible 2.9. If using forward slashes in the ``win_regedit`` ``path`` value, make sure to change the forward slash ``/`` to a backslash ``\``. If enclosed in double quotes the backslash will have to be doubled up. -- win_updates - Removed deprecated alias ``blacklist``, use ``reject_list`` instead. -- win_updates - Removed deprecated alias ``whitelist``, use ``accept_list`` instead. -- win_updates - Removed deprecated module option ``use_scheduled_task``. This option did not change any functionality in the module and can be safely removed from the task entry. -- win_uri - Removed the deprecated option alias ``password``, use ``url_password`` instead. -- win_uri - Removed the deprecated option alias ``user`` and ``username``, use ``url_username`` instead. - -cisco.ios -~~~~~~~~~ - -- Deprecated ios_logging module in favor of ios_logging_global. -- Deprecated next_hop_self attribute for bgp_address_family with nexthop_self. - -cisco.nxos -~~~~~~~~~~ - -- The nxos_bgp module has been removed with this release. -- The nxos_bgp_af module has been removed with this release. -- The nxos_bgp_neighbor module has been removed with this release. -- The nxos_bgp_neighbor_af module has been removed with this release. - -community.ciscosmb -~~~~~~~~~~~~~~~~~~ - -- remove testing for Python 2.6 nad 2.7 -- remove testing for ansible 2.9 - -community.general -~~~~~~~~~~~~~~~~~ - -- The collection no longer supports ansible-core 2.11 and ansible-core 2.12. Parts of the collection might still work on these ansible-core versions, but others might not (https://github.com/ansible-collections/community.general/pull/7269). -- ansible_galaxy_install - support for Ansible 2.9 and ansible-base 2.10 has been removed (https://github.com/ansible-collections/community.general/pull/7358). -- consul - when ``state=absent``, the options ``script``, ``ttl``, ``tcp``, ``http``, and ``interval`` can no longer be specified (https://github.com/ansible-collections/community.general/pull/7358). -- gconftool2 - ``state=get`` has been removed. Use the module ``community.general.gconftool2_info`` instead (https://github.com/ansible-collections/community.general/pull/7358). -- gitlab_runner - remove the default value for the ``access_level`` option. To restore the previous behavior, explicitly set it to ``ref_protected`` (https://github.com/ansible-collections/community.general/pull/7358). -- htpasswd - removed code for passlib <1.6 (https://github.com/ansible-collections/community.general/pull/6901). -- manageiq_polices - ``state=list`` has been removed. Use the module ``community.general.manageiq_policies_info`` instead (https://github.com/ansible-collections/community.general/pull/7358). -- manageiq_tags - ``state=list`` has been removed. Use the module ``community.general.manageiq_tags_info`` instead (https://github.com/ansible-collections/community.general/pull/7358). -- mh.mixins.cmd module utils - the ``ArgFormat`` class has been removed (https://github.com/ansible-collections/community.general/pull/7358). -- mh.mixins.cmd module utils - the ``CmdMixin`` mixin has been removed. Use ``community.general.plugins.module_utils.cmd_runner.CmdRunner`` instead (https://github.com/ansible-collections/community.general/pull/7358). -- mh.mixins.cmd module utils - the mh.mixins.cmd module utils has been removed after all its contents were removed (https://github.com/ansible-collections/community.general/pull/7358). -- mh.module_helper module utils - the ``CmdModuleHelper`` and ``CmdStateModuleHelper`` classes have been removed. Use ``community.general.plugins.module_utils.cmd_runner.CmdRunner`` instead (https://github.com/ansible-collections/community.general/pull/7358). -- proxmox module utils - removed unused imports (https://github.com/ansible-collections/community.general/pull/6873). -- xfconf - the deprecated ``disable_facts`` option was removed (https://github.com/ansible-collections/community.general/pull/7358). - -community.hashi_vault -~~~~~~~~~~~~~~~~~~~~~ - -- The minimum supported version of ``ansible-core`` is now ``2.14``, support for ``2.13`` has been dropped (https://github.com/ansible-collections/community.hashi_vault/pull/403). - -community.vmware -~~~~~~~~~~~~~~~~ - -- Removed module util `version` (https://github.com/ansible-collections/community.vmware/issues/1639). -- vmware_guest - removed specifying CDROM configuration as a dict, instead use a list (https://github.com/ansible-collections/community.vmware/issues/1472). -- vmware_host_lockdown - removed deprecated states `absent` and `present` (https://github.com/ansible-collections/community.vmware/issues/1517). -- vmware_rest_client - removed deprecated method `get_tag_by_category()` (https://github.com/ansible-collections/community.vmware/issues/1898). - -community.windows -~~~~~~~~~~~~~~~~~ - -- Removed testing for Server 2012 and Server 2012 R2 as they are reaching End of Life status from Microsoft. These OS versions may continue to work but will not be tested in CI. -- win_nssm - Removed the deprecated module option ``app_parameters``, use ``arguments`` instead. -- win_psmodule - Removed the deprecated module option ``url``, use ``community.windows.win_psrepository`` to manage repositories instead -- win_psmodule - Will no longer remove the ``repository`` specified when ``state: absent``, use ``community.windows.win_psrepository`` to manage repositories instead -- win_scheduled_tasks - Removed support for a trigger ``repetition`` to be defined as a list of dictionary entries. Specify the ``repetition`` as a dictionary value rather than a list of dictionaries. - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- The ``dellemc_get_firmware_inventory`` module is removed and replaced with the module ``idrac_firmware_info``. -- The ``dellemc_get_system_inventory`` module is removed and replaced with the module ``idrac_system_info``. - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- hcloud_datacenter_facts Removed deprecated facts module -- hcloud_floating_ip_facts Removed deprecated facts module -- hcloud_image_facts Removed deprecated facts module -- hcloud_location_facts Removed deprecated facts module -- hcloud_server_facts Removed deprecated facts module -- hcloud_server_type_facts Removed deprecated facts module -- hcloud_ssh_key_facts Removed deprecated facts module -- hcloud_volume_facts Removed deprecated facts module - -Security Fixes --------------- - -Ansible-core -~~~~~~~~~~~~ - -- ansible-galaxy - Prevent roles from using symlinks to overwrite files outside of the installation directory (CVE-2023-5115) - -Bugfixes --------- - -Ansible-core -~~~~~~~~~~~~ - -- Allow for searching handler subdir for included task via include_role (https://github.com/ansible/ansible/issues/81722) -- AnsibleModule.run_command - Only use selectors when needed, and rely on Python stdlib subprocess for the simple task of collecting stdout/stderr when prompt matching is not required. -- Cache host_group_vars after instantiating it once and limit the amount of repetitive work it needs to do every time it runs. -- Call PluginLoader.all() once for vars plugins, and load vars plugins that run automatically or are enabled specifically by name subsequently. -- Display - Defensively configure writing to stdout and stderr with a custom encoding error handler that will replace invalid characters while providing a deprecation warning that non-utf8 text will result in an error in a future version. -- Exclude internal options from man pages and docs. -- Fix ``ansible-config init`` man page option indentation. -- Fix ``ast`` deprecation warnings for ``Str`` and ``value.s`` when using Python 3.12. -- Fix ``run_once`` being incorrectly interpreted on handlers (https://github.com/ansible/ansible/issues/81666) -- Fix exceptions caused by various inputs when performing arg splitting or parsing key/value pairs. Resolves issue https://github.com/ansible/ansible/issues/46379 and issue https://github.com/ansible/ansible/issues/61497 -- Fix incorrect parsing of multi-line Jinja2 blocks when performing arg splitting or parsing key/value pairs. -- Fix post-validating looped task fields so the strategy uses the correct values after task execution. -- Fixed `pip` module failure in case of usage quotes for `virtualenv_command` option for the venv command. (https://github.com/ansible/ansible/issues/76372) -- From issue https://github.com/ansible/ansible/issues/80880, when notifying a handler from another handler, handler notifications must be registered immediately as the flush_handler call is not recursive. -- Import ``FILE_ATTRIBUTES`` from ``ansible.module_utils.common.file`` in ``ansible.module_utils.basic`` instead of defining it twice. -- Inventory scripts parser not treat exception when getting hostsvar (https://github.com/ansible/ansible/issues/81103) -- On Python 3 use datetime methods ``fromtimestamp`` and ``now`` with UTC timezone instead of ``utcfromtimestamp`` and ``utcnow``, which are deprecated in Python 3.12. -- PluginLoader - fix Jinja plugin performance issues (https://github.com/ansible/ansible/issues/79652) -- PowerShell - Remove some code which is no longer valid for dotnet 5+ -- Prevent running same handler multiple times when included via ``include_role`` (https://github.com/ansible/ansible/issues/73643) -- Prompting - add a short sleep between polling for user input to reduce CPU consumption (https://github.com/ansible/ansible/issues/81516). -- Properly disable ``jinja2_native`` in the template module when jinja2 override is used in the template (https://github.com/ansible/ansible/issues/80605) -- Properly template tags in parent blocks (https://github.com/ansible/ansible/issues/81053) -- Remove unreachable parser error for removed ``static`` parameter of ``include_role`` -- Replace uses of ``configparser.ConfigParser.readfp()`` which was removed in Python 3.12 with ``configparser.ConfigParser.read_file()`` (https://github.com/ansible/ansible/issues/81656) -- Set filters ``intersect``, ``difference``, ``symmetric_difference`` and ``union`` now always return a ``list``, never a ``set``. Previously, a ``set`` would be returned if the inputs were a hashable type such as ``str``, instead of a collection, such as a ``list`` or ``tuple``. -- Set filters ``intersect``, ``difference``, ``symmetric_difference`` and ``union`` now use set operations when the given items are hashable. Previously, list operations were performed unless the inputs were a hashable type such as ``str``, instead of a collection, such as a ``list`` or ``tuple``. -- Switch result queue from a ``multiprocessing.queues.Queue` to ``multiprocessing.queues.SimpleQueue``, primarily to allow properly handling pickling errors, to prevent an infinite hang waiting for task results -- The ``ansible-config init`` command now has a documentation description. -- The ``ansible-galaxy collection download`` command now has a documentation description. -- The ``ansible-galaxy collection install`` command documentation is now visible (previously hidden by a decorator). -- The ``ansible-galaxy collection verify`` command now has a documentation description. -- The ``ansible-galaxy role install`` command documentation is now visible (previously hidden by a decorator). -- The ``ansible-inventory`` command command now has a documentation description (previously used as the epilog). -- The ``hostname`` module now also updates both current and permanent hostname on OpenBSD. Before it only updated the permanent hostname (https://github.com/ansible/ansible/issues/80520). -- Update module_utils.urls unit test to work with cryptography >= 41.0.0. -- When generating man pages, use ``func`` to find the command function instead of looking it up by the command name. -- ``StrategyBase._process_pending_results`` - create a ``Templar`` on demand for templating ``changed_when``/``failed_when``. -- ``ansible-galaxy`` now considers all collection paths when identifying which collection requirements are already installed. Use the ``COLLECTIONS_PATHS`` and ``COLLECTIONS_SCAN_SYS_PATHS`` config options to modify these. Previously only the install path was considered when resolving the candidates. The install path will remain the only one potentially modified. (https://github.com/ansible/ansible/issues/79767, https://github.com/ansible/ansible/issues/81163) -- ``ansible.module_utils.service`` - ensure binary data transmission in ``daemonize()`` -- ``ansible.module_utils.service`` - fix inter-process communication in ``daemonize()`` -- ``import_role`` reverts to previous behavior of exporting vars at compile time. -- ``pkg_mgr`` - fix the default dnf version detection -- ansiballz - Prevent issue where the time on the control host could change part way through building the ansiballz file, potentially causing a pre-1980 date to be used during ansiballz unpacking leading to a zip file error (https://github.com/ansible/ansible/issues/80089) -- ansible terminal color settings were incorrectly limited to 16 options via 'choices', removing so all 256 can be accessed. -- ansible-console - fix filtering by collection names when a collection search path was set (https://github.com/ansible/ansible/pull/81450). -- ansible-galaxy - Enabled the ``data`` tarfile filter during role installation for Python versions that support it. A probing mechanism is used to avoid Python versions with a broken implementation. -- ansible-galaxy - Fix issue installing collections containing directories with more than 100 characters on python versions before 3.10.6 -- ansible-galaxy - Fix variable type error when installing subdir collections (https://github.com/ansible/ansible/issues/80943) -- ansible-galaxy - Provide a better error message when using a requirements file with an invalid format - https://github.com/ansible/ansible/issues/81901 -- ansible-galaxy - fix installing collections from directories that have a trailing path separator (https://github.com/ansible/ansible/issues/77803). -- ansible-galaxy - fix installing signed collections (https://github.com/ansible/ansible/issues/80648). -- ansible-galaxy - reduce API calls to servers by fetching signatures only for final candidates. -- ansible-galaxy - started allowing the use of pre-releases for collections that do not have any stable versions published. (https://github.com/ansible/ansible/pull/81606) -- ansible-galaxy - started allowing the use of pre-releases for dependencies on any level of the dependency tree that specifically demand exact pre-release versions of collections and not version ranges. (https://github.com/ansible/ansible/pull/81606) -- ansible-galaxy collection verify - fix verifying signed collections when the keyring is not configured. -- ansible-galaxy info - fix reporting no role found when lookup_role_by_name returns None. -- ansible-inventory - index available_hosts for major performance boost when dumping large inventories -- ansible-test - Add a ``pylint`` plugin to work around a known issue on Python 3.12. -- ansible-test - Add support for ``argcomplete`` version 3. -- ansible-test - All containers created by ansible-test now include the current test session ID in their name. This avoids conflicts between concurrent ansible-test invocations using the same container host. -- ansible-test - Always use ansible-test managed entry points for ansible-core CLI tools when not running from source. This fixes issues where CLI entry points created during install are not compatible with ansible-test. -- ansible-test - Fix a traceback that occurs when attempting to test Ansible source using a different ansible-test. A clear error message is now given when this scenario occurs. -- ansible-test - Fix handling of timeouts exceeding one day. -- ansible-test - Fix parsing of cgroup entries which contain a ``:`` in the path (https://github.com/ansible/ansible/issues/81977). -- ansible-test - Fix several possible tracebacks when using the ``-e`` option with sanity tests. -- ansible-test - Fix various cases where the test timeout could expire without terminating the tests. -- ansible-test - Include missing ``pylint`` requirements for Python 3.10. -- ansible-test - Pre-build a PyYAML wheel before installing requirements to avoid a potential Cython build failure. -- ansible-test - Remove redundant warning about missing programs before attempting to execute them. -- ansible-test - The ``import`` sanity test now checks the collection loader for remote-only Python support when testing ansible-core. -- ansible-test - Unit tests now report warnings generated during test runs. Previously only warnings generated during test collection were reported. -- ansible-test - Update ``pylint`` to 2.17.2 to resolve several possible false positives. -- ansible-test - Update ``pylint`` to 2.17.3 to resolve several possible false positives. -- ansible-test - Update ``pylint`` to version 3.0.1. -- ansible-test - Use ``raise ... from ...`` when raising exceptions from within an exception handler. -- ansible-test - When bootstrapping remote FreeBSD instances, use the OS packaged ``setuptools`` instead of installing the latest version from PyPI. -- ansible-test local change detection - use ``git merge-base HEAD`` instead of ``git merge-base --fork-point `` (https://github.com/ansible/ansible/pull/79734). -- ansible-vault - fail when the destination file location is not writable before performing encryption (https://github.com/ansible/ansible/issues/81455). -- apt - ignore fail_on_autoremove and allow_downgrade parameters when using aptitude (https://github.com/ansible/ansible/issues/77868). -- blockinfile - avoid crash with Python 3 if creating the directory fails when ``create=true`` (https://github.com/ansible/ansible/pull/81662). -- connection timeouts defined in ansible.cfg will now be properly used, the --timeout cli option was obscuring them by always being set. -- copy - print correct destination filename when using `content` and `--diff` (https://github.com/ansible/ansible/issues/79749). -- copy unit tests - Fixing "dir all perms" documentation and formatting for easier reading. -- core will now also look at the connection plugin to force 'local' interpreter for networking path compatibility as just ansible_network_os could be misleading. -- deb822_repository - use http-agent for receiving content (https://github.com/ansible/ansible/issues/80809). -- debconf - idempotency in questions with type 'password' (https://github.com/ansible/ansible/issues/47676). -- distribution facts - fix Source Mage family mapping -- dnf - fix a failure when a package from URI was specified and ``update_only`` was set (https://github.com/ansible/ansible/issues/81376). -- dnf5 - Update dnf5 module to handle API change for setting the download directory (https://github.com/ansible/ansible/issues/80887) -- dnf5 - Use ``transaction.check_gpg_signatures`` API call to check package signatures AND possibly to recover from when keys are missing. -- dnf5 - fix module and package names in the message following failed module respawn attempt -- dnf5 - use the logs API to determine transaction problems -- dpkg_selections - check if the package exists before performing the selection operation (https://github.com/ansible/ansible/issues/81404). -- encrypt - deprecate passlib_or_crypt API (https://github.com/ansible/ansible/issues/55839). -- fetch - Handle unreachable errors properly (https://github.com/ansible/ansible/issues/27816) -- file modules - Make symbolic modes with X use the computed permission, not original file (https://github.com/ansible/ansible/issues/80128) -- file modules - fix validating invalid symbolic modes. -- first found lookup has been updated to use the normalized argument parsing (pythonic) matching the documented examples. -- first found lookup, fixed an issue with subsequent items clobbering information from previous ones. -- first_found lookup now gets 'untemplated' loop entries and handles templating itself as task_executor was removing even 'templatable' entries and breaking functionality. https://github.com/ansible/ansible/issues/70772 -- galaxy - check if the target for symlink exists (https://github.com/ansible/ansible/pull/81586). -- galaxy - cross check the collection type and collection source (https://github.com/ansible/ansible/issues/79463). -- gather_facts parallel option was doing the reverse of what was stated, now it does run modules in parallel when True and serially when False. -- handlers - fix ``v2_playbook_on_notify`` callback not being called when notifying handlers -- handlers - the ``listen`` keyword can affect only one handler with the same name, the last one defined as it is a case with the ``notify`` keyword (https://github.com/ansible/ansible/issues/81013) -- include_role - expose variables from parent roles to role's handlers (https://github.com/ansible/ansible/issues/80459) -- inventory_ini - handle SyntaxWarning while parsing ini file in inventory (https://github.com/ansible/ansible/issues/81457). -- iptables - remove default rule creation when creating iptables chain to be more similar to the command line utility (https://github.com/ansible/ansible/issues/80256). -- lib/ansible/utils/encrypt.py - remove unused private ``_LOCK`` (https://github.com/ansible/ansible/issues/81613) -- lookup/url.py - Fix incorrect var/env/ini entry for `force_basic_auth` -- man page build - Remove the dependency on the ``docs`` directory for building man pages. -- man page build - Sub commands of ``ansible-galaxy role`` and ``ansible-galaxy collection`` are now documented. -- module responses - Ensure that module responses are utf-8 adhereing to JSON RFC and expectations of the core code. -- module/role argument spec - validate the type for options that are None when the option is required or has a non-None default (https://github.com/ansible/ansible/issues/79656). -- modules/user.py - Add check for valid directory when creating new user homedir (allows /dev/null as skeleton) (https://github.com/ansible/ansible/issues/75063) -- paramiko_ssh, psrp, and ssh connection plugins - ensure that all values for options that should be strings are actually converted to strings (https://github.com/ansible/ansible/pull/81029). -- password_hash - fix salt format for ``crypt`` (only used if ``passlib`` is not installed) for the ``bcrypt`` algorithm. -- pep517 build backend - Copy symlinks when copying the source tree. This avoids tracebacks in various scenarios, such as when a venv is present in the source tree. -- pep517 build backend - Use the documented ``import_module`` import from ``importlib``. -- pip module - Update module to prefer use of the python ``packaging`` and ``importlib.metadata`` modules due to ``pkg_resources`` being deprecated (https://github.com/ansible/ansible/issues/80488) -- pkg_mgr.py - Fix `ansible_pkg_mgr` incorrect in TencentOS Server Linux -- pkg_mgr.py - Fix `ansible_pkg_mgr` is unknown in Kylin Linux (https://github.com/ansible/ansible/issues/81332) -- powershell modules - Only set an rc of 1 if the PowerShell pipeline signaled an error occurred AND there are error records present. Previously it would do so only if the error signal was present without checking the error count. -- replace - handle exception when bad escape character is provided in replace (https://github.com/ansible/ansible/issues/79364). -- role deduplication - don't deduplicate before a role has had a task run for that particular host (https://github.com/ansible/ansible/issues/81486). -- service module, does not permanently configure flags flags on Openbsd when enabling/disabling a service. -- service module, enable/disable is not a exclusive action in checkmode anymore. -- setup gather_timeout - Fix timeout in get_mounts_facts for linux. -- setup module (fact gathering) will now try to be smarter about different versions of facter emitting error when --puppet flag is used w/o puppet. -- syntax check - Limit ``--syntax-check`` to ``ansible-playbook`` only, as that is the only CLI affected by this argument (https://github.com/ansible/ansible/issues/80506) -- tarfile - handle data filter deprecation warning message for extract and extractall (https://github.com/ansible/ansible/issues/80832). -- template - Fix for formatting issues when a template path contains valid jinja/strftime pattern (especially line break one) and using the template path in ansible_managed (https://github.com/ansible/ansible/pull/79129) -- templating - In the template action and lookup, use local jinja2 environment overlay overrides instead of mutating the templars environment -- templating - prevent setting arbitrary attributes on Jinja2 environments via Jinja2 overrides in templates -- templating escape and single var optimization now use correct delimiters when custom ones are provided either via task or template header. -- unarchive - fix unarchiving sources that are copied to the remote node using a relative temporory directory path (https://github.com/ansible/ansible/issues/80710). -- uri - fix search for JSON type to include complex strings containing '+' -- uri/urls - Add compat function to handle the ability to parse the filename from a Content-Disposition header (https://github.com/ansible/ansible/issues/81806) -- urls.py - fixed cert_file and key_file parameters when running on Python 3.12 - https://github.com/ansible/ansible/issues/80490 -- user - set expiration value correctly when unable to retrieve the current value from the system (https://github.com/ansible/ansible/issues/71916) -- validate-modules sanity test - replace semantic markup parsing and validating code with the code from `antsibull-docs-parser 0.2.0 `__ (https://github.com/ansible/ansible/pull/80406). -- vars_prompt - internally convert the ``unsafe`` value to ``bool`` -- vault and unvault filters now properly take ``vault_id`` parameter. -- win_fetch - Add support for using file with wildcards in file name. (https://github.com/ansible/ansible/issues/73128) -- winrm - Better handle send input failures when communicating with hosts under load - -amazon.aws -~~~~~~~~~~ - -- autoscaling_group - fix ValidationError when describing an autoscaling group that has more than 20 target groups attached to it by breaking the request into chunks (https://github.com/ansible-collections/amazon.aws/pull/1593). -- autoscaling_group_info - fix ValidationError when describing an autoscaling group that has more than 20 target groups attached to it by breaking the request into chunks (https://github.com/ansible-collections/amazon.aws/pull/1593). -- aws_ec2 inventory plugin - fix ``NoRegionError`` when no regions are provided and region isn't specified (https://github.com/ansible-collections/amazon.aws/issues/1551). -- backup_plan - Use existing ``scrub_none_values`` function from module_utils to remove None values from nested dicts in supplied params. Nested None values were being retained and causing an error when sent through to the boto3 client operation (https://github.com/ansible-collections/amazon.aws/pull/1611). -- backup_selection - ensures that updating an existing selection will add new ``Conditions`` if there previously were not any (https://github.com/ansible-collections/amazon.aws/pull/1701). -- backup_vault - fix error when updating tags on a backup vault by using the correct boto3 client methods for tagging and untagging backup resources (https://github.com/ansible-collections/amazon.aws/pull/1610). -- cloudwatchevent_rule - Fixes changed status to report False when no change has been made. The module had incorrectly always reported a change. (https://github.com/ansible-collections/amazon.aws/pull/1589) -- ec2_instance - fix check_mode issue when adding network interfaces (https://github.com/ansible-collections/amazon.aws/issues/1403). -- ec2_instance - retry API call if we get ``InvalidInstanceID.NotFound`` error (https://github.com/ansible-collections/amazon.aws/pull/1650). -- ec2_metadata_facts - Handle decompression when EC2 instance user-data is gzip compressed. The fetch_url method from ansible.module_utils.urls does not decompress the user-data unless the header explicitly contains ``Content-Encoding: gzip`` (https://github.com/ansible-collections/amazon.aws/pull/1575). -- ec2_vpc_nat_gateway - adding a boolean parameter called ``default_create`` to allow users to have the option to choose whether they want to display an error message or create a NAT gateway when an EIP address is not found. The module (ec2_vpc_nat_gateway) had incorrectly failed silently if EIP didn't exist (https://github.com/ansible-collections/amazon.aws/issues/1295). -- ec2_vpc_nat_gateway - fixes to nat gateway so that when the user creates a private NAT gateway, an Elastic IP address should not be allocated. The module had inncorrectly always allocate elastic IP address when creating private nat gateway (https://github.com/ansible-collections/amazon.aws/pull/1632). -- ec2_vpc_route_table_info - default filters to empty dictionary (https://github.com/ansible-collections/amazon.aws/issues/1668). -- elb_application_lb - fix missing attributes on creation of ALB. The ``create_or_update_alb()`` was including ALB-specific attributes when updating an existing ALB but not when creating a new ALB (https://github.com/ansible-collections/amazon.aws/issues/1510). -- elb_application_lb_info - ensure all API queries use the retry decorator (https://github.com/ansible-collections/amazon.aws/issues/1767). -- lambda_execute - Fixes to the stack trace output, where it does not contain spaces between each character. The module had incorrectly always outputted extra spaces between each character. (https://github.com/ansible-collections/amazon.aws/pull/1615) -- module_utils.acm - fixes list_certificates returning only RSA_2048 certificates (https://github.com/ansible-collections/amazon.aws/issues/1567). -- module_utils.backup - get_selection_details fix empty list returned when multiple backup selections exist (https://github.com/ansible-collections/amazon.aws/pull/1633). -- rds_cluster - Add ``AllocatedStorage``, ``DBClusterInstanceClass``, ``StorageType``, ``Iops``, and ``EngineMode`` to the list of parameters that can be passed when creating or modifying a Multi-AZ RDS cluster (https://github.com/ansible-collections/amazon.aws/pull/1657). -- rds_cluster - Allow to pass GlobalClusterIdentifier to rds cluster on creation (https://github.com/ansible-collections/amazon.aws/pull/1663). -- rds_instance - add support for CACertificateIdentifier to create/update rds instance (https://github.com/ansible-collections/amazon.aws/pull/1459). -- s3_bucket - fixes issue when deleting a bucket with unversioned objects (https://github.com/ansible-collections/amazon.aws/issues/1533). -- s3_object - fixed ``NoSuchTagSet`` error when S3 endpoint doesn't support tags (https://github.com/ansible-collections/amazon.aws/issues/1607). -- s3_object - fixes regression related to objects with a leading ``/`` (https://github.com/ansible-collections/amazon.aws/issues/1548). - -ansible.netcommon -~~~~~~~~~~~~~~~~~ - -- Ensure that all connection plugin options that should be strings are actually strings (https://github.com/ansible-collections/ansible.netcommon/pull/549). -- Fix attribute types from string to str in filter plugins. -- Vendor telnetlib from cpython (https://github.com/ansible-collections/ansible.netcommon/pull/546) - -ansible.utils -~~~~~~~~~~~~~ - -- Validate input for ipv4_hex(https://github.com/ansible-collections/ansible.utils/issues/281) - -ansible.windows -~~~~~~~~~~~~~~~ - -- Remove some code which is no longer valid for dotnet 5+ -- win_async - Set maximum data size allowed when deserializing async output - https://github.com/ansible-collections/ansible.windows/pull/520 -- win_group_membership - Return accurate results when using check_mode - https://github.com/ansible-collections/ansible.windows/issues/532 -- win_updates - Add retry mechanism when polling output in case file is locked by another process like an Anti Virus - https://github.com/ansible-collections/ansible.windows/issues/490 -- win_updates - Add special handling for KB2267602 in case it fails - https://github.com/ansible-collections/ansible.windows/issues/530 -- win_updates - Fix up endless retries when an update failed to install more than once - https://github.com/ansible-collections/ansible.windows/issues/343 - -arista.eos -~~~~~~~~~~ - -- Fix command generated for local-interface with in ntp server attribute. -- Fix command generation for source_interface attribute. -- Fix secondary ip address parsing. -- Skip compile testing for python <3.6. -- fix line attribute fact generation and placement in ACE, when ACE is not fully parsed. -- fix sanity issues w.r.t python27 - -check_point.mgmt -~~~~~~~~~~~~~~~~ - -- cp_mgmt_access_rules - split vpn param that can accept either a String or list of objects to two -- module_utils/checkpoint.py - fixed compile issue (Syntax Error) on python 2.7 - -chocolatey.chocolatey -~~~~~~~~~~~~~~~~~~~~~ - -- win-chocolatey - unable to install packages if a license is already installed and chocolatey.extension is not installed - -cisco.aci -~~~~~~~~~ - -- Change input of prefix_suppression to type string to allow enable, disable and inherit options for aci_interface_policy_ospf -- Fixed issue with default values for ssl, proxy, timeout in aci.py and the display of host in the url when the plugin httpapi is used -- Modified aci_rest and aci_config_snapshot modules to display the correct URL output string (#487) - -cisco.ios -~~~~~~~~~ - -- Fix invalid password length not being recognized by the error parser. -- The regex looking for errors in the terminal output was matching anything with '\S+ Error:'. Caused issues with 'show runnning-config' if this string appeared in the output. Updated the regex to require the % anchor. -- bgp_address_family - fix deleted string with int concat issue in bgp_address_family. -- ios_acls - Fix protocol_options rendering corrects processing of overridden/ replaced state. -- ios_acls - Fix standard acls rendering. -- ios_bgp_address_family - fix rendering of remote_as configuration with period. -- ios_facts - Fix facts gathering when memory statistics head is not hexadecimal. (https://github.com/ansible-collections/cisco.ios/issues/776) -- ios_facts - fix calculation of memory from bytes to megabytes; grab correct output element for free memory (https://github.com/ansible-collections/cisco.ios/issues/763) -- ios_l3_interfaces - account for secondary/primary when comparing ipv4 addresses. (https://github.com/ansible-collections/cisco.ios/issues/826) -- ios_lag_interfaces - Fix empty facts to be a list. -- ios_logging_global - fix configuration order to configure discriminator before buffer. -- ios_ospf_interface - Fix configuration rendering for ipv4 and ipv6 configurations. -- ios_ospf_interface - Fix replaced and overridden state, action to negate superfluous configuration. -- ios_prefix_lists - fix deleted state to remove exisiting prefix lists from configuration. -- ios_service - Put condition to add `private_config_encryption` in default services -- ios_snmp_server - Add default versions to version 3 users. -- ios_snmp_server - Fixes error handling for snmp user when snmp agent is not enabled -- ios_static_routes - Fix non vlan entries to have unique group identifier. -- ios_static_routes - Fix parsers to parse interface attribute correctly. -- ospfv2 - Fixed rendering of capability command with vrf_lite. -- ospfv3 - Fixed rendering of capability command with vrf_lite. -- snmp_server - update module to get snmp_server user configuration. - -cisco.iosxr -~~~~~~~~~~~ - -- Add support to delete specific static route entry.(https://github.com/ansible-collections/cisco.iosxr/issues/375) -- Fix issue in deletion of ospf.(https://github.com/ansible-collections/cisco.iosxr/issues/425) -- Fix issue in facts gathering for Interfaces RM.(https://github.com/ansible-collections/cisco.iosxr/issues/417) -- Fix issue in lacp and lldp_global of local variable commands. -- Fixing Bundle-Ether/-POS recognition for resource modules. (https://github.com/ansible-collections/cisco.iosxr/issues/369) -- Support overridden state in bgp_global,lacp and lldp_global module.(https://github.com/ansible-collections/cisco.iosxr/issues/386) -- acls - Fix issue in ``replaced`` state of not replacing ace entries with remark action. (https://github.com/ansible-collections/cisco.iosxr/issues/332) -- l2_interfaces Fix issue in qvlan parsing.(https://github.com/ansible-collections/cisco.iosxr/issues/403) -- l3_interfaces - Fix issue in ``gather`` state of not gathering management interface. (https://github.com/ansible-collections/cisco.iosxr/issues/381) - -cisco.ise -~~~~~~~~~ - -- Cannot get cisco.ise.active_directory_groups_by_domain_info to work. -- Cannot get cisco.ise.rest_id_store to work fixed. -- System Certificate Update does not work but always reports Object already present temporary solution. -- cisco.ise.mnt_session_active_count_info ise_reponse is null fixed. -- node_deployment tasks fail because of timeout, adding new collection param. -- system_certificate - added support for none value in the used_by param. -- system_certificate - fixed get_object_by_id response. - -cisco.meraki -~~~~~~~~~~~~ - -- Adding condition to avoid error on exists on devices. -- Bad naming `networkId` parameter in `networks_appliance_traffic_shaping_custom_performance_classes`. -- Bad naming `networkId` parameter in `networks_appliance_warm_spare_swap`. -- Bad naming `networkId` parameter in `networks_bind`. -- Bad naming `networkId` parameter in `networks_clients_provision`. -- Bad naming `networkId` parameter in `networks_devices_remove` and `networks_devices_claim_vmx` -- Bad naming `networkId` parameter in `networks_firmware_upgrades_rollbacks`. -- Bad naming `networkId` parameter in `networks_firmware_upgrades_staged_events_rollbacks`. -- Bad naming `networkId` parameter in `networks_mqtt_brokers`. -- Bad naming `networkId` parameter in `networks_pii_requests_delete`. -- Bad naming `networkId` parameter in `networks_sm_devices_checkin`. -- Bad naming `networkId` parameter in `networks_sm_devices_fields`. -- Bad naming `networkId` parameter in `networks_sm_devices_lock`. -- Bad naming `networkId` parameter in `networks_sm_devices_modify_tags`. -- Bad naming `networkId` parameter in `networks_sm_devices_move`. -- Bad naming `networkId` parameter in `networks_sm_devices_refresh_details`. -- Bad naming `networkId` parameter in `networks_sm_devices_unenroll`. -- Bad naming `networkId` parameter in `networks_sm_devices_wipe`. -- Bad naming `networkId` parameter in `networks_sm_user_access_devices_delete`. -- Bad naming `networkId` parameter in `networks_split`. -- Bad naming `networkId` parameter in `networks_switch_stacks_add`. -- Bad naming `networkId` parameter in `networks_switch_stacks_remove`. -- Bad naming `networkId` parameter in `networks_unbind`. -- Devices module documentation fixed. -- Meraki Compare Equality 2 added. -- New condition added to Meraki Compare Equality. -- Removing ignores. -- Resolved the issue with link negotation at meraki_ms_switchport -- Returning requires_ansible to 2.9.10 -- Returning requires_ansible to >=2.14.0 -- Sanity fixes. -- Updating collection docs link. -- Updating documentation, yml fixes - Documentation Broken. -- cisco.meraki.networks_devices_claim - got an unexpected keyword argument 'network_id', bug with parameter naming. -- cisco.meraki.organizations_login_security module will not update org api authentication - fixing for look at organizations_login_security. -- meraki_devices - Fix endpoints due to breaking change in Meraki API v1.33 -- runtime updated requires_ansible from 2.9.10 to '>=2.14.0'. - -cisco.mso -~~~~~~~~~ - -- Fix mso_tenant_site "site not found" issue on absent (#368) - -cisco.nxos -~~~~~~~~~~ - -- acls - Fix parsing error when ACE has a source port range (https://github.com/ansible-collections/cisco.nxos/issues/713). -- interfaces - Re-apply existing non-default MTU when changing mode to L2 (https://github.com/ansible-collections/cisco.nxos/issues/730). -- l3_interfaces - Append tag when updating IP address with state replaced (https://github.com/ansible-collections/cisco.nxos/issues/678). -- lag_interfaces - Allow force option to be idempotent (https://github.com/ansible-collections/cisco.nxos/issues/742). -- ntp_global - Fix incorrect handling of prefer option (https://github.com/ansible-collections/cisco.nxos/issues/670). -- nxos_acls - fix parsing of ACE with named source/dest port range (https://github.com/ansible-collections/cisco.nxos/issues/763). -- nxos_banner - Add support for a custom multiline delimiter -- nxos_facts - Fix missing SVI facts (https://github.com/ansible-collections/cisco.nxos/issues/440). -- nxos_static_routes - Prevent action states to generate terminal configuration command. -- nxos_static_routes - Update the delete operation of static routes to be similar to other platforms. (https://github.com/ansible-collections/cisco.nxos/issues/666) -- snmp_server - fix host delete when authentication options are present (https://github.com/ansible-collections/cisco.nxos/issues/439). -- terminal - attempt privilege escalation only when prompt does not end with # -- vtp_version - allow VTP version 3 to be configured (https://github.com/ansible-collections/cisco.nxos/issues/704). - -cloud.common -~~~~~~~~~~~~ - -- Ensure result is always defined in lookup plugins (https://github.com/ansible-collections/cloud.common/pull/116/files). -- Fix lookup modules failing on Ansible 2.15 (https://github.com/ansible-collections/cloud.common/pull/130). - -cloudscale_ch.cloud -~~~~~~~~~~~~~~~~~~~ - -- Add missing modules to the "cloudscale_ch.cloud.cloudscale" action group. -- Remove outdated Ansible version requirement from the README. - -community.aws -~~~~~~~~~~~~~ - -- Remove ``apigateway`` and ``apigateway_deployment`` from meta/runtime.yml (https://github.com/ansible-collections/community.aws/pull/1905). -- batch_compute_environment - fixed incorrect handling of Gov Cloud ARNs in ``compute_environment_name`` parameter (https://github.com/ansible-collections/community.aws/issues/1846). -- cloudfront_distribution - The origins recognises the s3 domains with region part now (https://github.com/ansible-collections/community.aws/issues/1819). -- cloudfront_distribution - no longer crashes when waiting for completion of creation (https://github.com/ansible-collections/community.aws/issues/255). -- cloudfront_distribution - now honours the ``enabled`` setting (https://github.com/ansible-collections/community.aws/issues/1823). -- dynamodb_table - secondary indexes are now created (https://github.com/ansible-collections/community.aws/issues/1825). -- ec2_launch_template - fixed incorrect handling of Gov Cloud ARNs in ``compute_environment_name`` parameter (https://github.com/ansible-collections/community.aws/issues/1846). -- elasticache_info - remove hard coded use of ``aws`` partition (https://github.com/ansible-collections/community.aws/issues/1846). -- iam_role - fixed incorrect rejection of Gov Cloud ARNs in ``boundary`` parameter (https://github.com/ansible-collections/community.aws/issues/1846). -- mq_broker - ensure broker is created with ``tags`` when passed (https://github.com/ansible-collections/community.aws/issues/1832). -- msk_cluster - remove hard coded use of ``aws`` partition (https://github.com/ansible-collections/community.aws/issues/1846). -- opensearch - Don't try to read a non existing key from the domain config (https://github.com/ansible-collections/community.aws/pull/1910). -- redshift - fixed hard coded use of ``aws`` partition (https://github.com/ansible-collections/community.aws/issues/1846). - -community.ciscosmb -~~~~~~~~~~~~~~~~~~ - -- added Cisco device config guide to address issue -- added extra "\n" to sending commands to address issue - -community.crypto -~~~~~~~~~~~~~~~~ - -- Fix PEM detection/identification to also accept random other lines before the line starting with ``-----BEGIN`` (https://github.com/ansible-collections/community.crypto/issues/627, https://github.com/ansible-collections/community.crypto/pull/628). -- acme_* modules - correctly handle error documents without ``type`` (https://github.com/ansible-collections/community.crypto/issues/651, https://github.com/ansible-collections/community.crypto/pull/652). -- openssh_cert, openssh_keypair - the modules ignored return codes of ``ssh`` and ``ssh-keygen`` in some cases (https://github.com/ansible-collections/community.crypto/issues/645, https://github.com/ansible-collections/community.crypto/pull/646). -- openssh_keypair - fix comment updating for OpenSSH before 6.5 (https://github.com/ansible-collections/community.crypto/pull/646). -- openssl_pkcs12 - modify autodetect to not detect pyOpenSSL >= 23.3.0, which removed PKCS#12 support (https://github.com/ansible-collections/community.crypto/pull/666). - -community.digitalocean -~~~~~~~~~~~~~~~~~~~~~~ - -- digital_ocean_domain - fix ``all_domains`` by using ``get_paginated_data`` to retrieve all of the domains in the account from the paginated domains api endpoint (https://github.com/ansible-collections/community.digitalocean/pull/307). - -community.dns -~~~~~~~~~~~~~ - -- HTTP module utils - make compatible with ansible-core 2.17 (https://github.com/ansible-collections/community.dns/pull/165). -- Update Public Suffix List. -- wait_for_txt, resolver module utils - improve error handling (https://github.com/ansible-collections/community.dns/pull/158). - -community.docker -~~~~~~~~~~~~~~~~ - -- docker_swarm - make init and join operations work again with Docker SDK for Python before 4.0.0 (https://github.com/ansible-collections/community.docker/issues/695, https://github.com/ansible-collections/community.docker/pull/696). -- docker_swarm_info - if ``service=true`` is used, do not crash when a service without an endpoint spec is encountered (https://github.com/ansible-collections/community.docker/issues/636, https://github.com/ansible-collections/community.docker/pull/637). -- docker_volume - fix crash caused by accessing an empty dictionary. The ``has_different_config()`` was raising an ``AttributeError`` because the ``self.existing_volume["Labels"]`` dictionary was ``None`` (https://github.com/ansible-collections/community.docker/pull/702). -- vendored Docker SDK for Python code - cherry-pick changes from the Docker SDK for Python code to align code. These changes should not affect the parts used by the collection's code (https://github.com/ansible-collections/community.docker/pull/694). - -community.general -~~~~~~~~~~~~~~~~~ - -- CmdRunner module utils - does not attempt to resolve path if executable is a relative or absolute path (https://github.com/ansible-collections/community.general/pull/7200). -- MH DependencyMixin module utils - deprecation notice was popping up for modules not using dependencies (https://github.com/ansible-collections/community.general/pull/6644, https://github.com/ansible-collections/community.general/issues/6639). -- bitwarden lookup plugin - the plugin made assumptions about the structure of a Bitwarden JSON object which may have been broken by an update in the Bitwarden API. Remove assumptions, and allow queries for general fields such as ``notes`` (https://github.com/ansible-collections/community.general/pull/7061). -- cmd_runner module utils - when a parameter in ``argument_spec`` has no type, meaning it is implicitly a ``str``, ``CmdRunner`` would fail trying to find the ``type`` key in that dictionary (https://github.com/ansible-collections/community.general/pull/6968). -- cobbler inventory plugin - fix calculation of cobbler_ipv4/6_address (https://github.com/ansible-collections/community.general/pull/6925). -- composer - fix impossible to run ``working_dir`` dependent commands. The module was throwing an error when trying to run a ``working_dir`` dependent command, because it tried to get the command help without passing the ``working_dir`` (https://github.com/ansible-collections/community.general/issues/3787). -- csv module utils - detects and remove unicode BOM markers from incoming CSV content (https://github.com/ansible-collections/community.general/pull/6662). -- datadog_downtime - presence of ``rrule`` param lead to the Datadog API returning Bad Request due to a missing recurrence type (https://github.com/ansible-collections/community.general/pull/6811). -- ejabberd_user - module was failing to detect whether user was already created and/or password was changed (https://github.com/ansible-collections/community.general/pull/7033). -- ejabberd_user - provide meaningful error message when the ``ejabberdctl`` command is not found (https://github.com/ansible-collections/community.general/pull/7028, https://github.com/ansible-collections/community.general/issues/6949). -- github_deploy_key - fix pagination behaviour causing a crash when only a single page of deploy keys exist (https://github.com/ansible-collections/community.general/pull/7375). -- gitlab_group - the module passed parameters to the API call even when not set. The module is now filtering out ``None`` values to remediate this (https://github.com/ansible-collections/community.general/pull/6712). -- gitlab_group_members - fix gitlab constants call in ``gitlab_group_members`` module (https://github.com/ansible-collections/community.general/issues/7467). -- gitlab_group_variable - deleted all variables when used with ``purge=true`` due to missing ``raw`` property in KNOWN attributes (https://github.com/ansible-collections/community.general/issues/7250). -- gitlab_project_members - fix gitlab constants call in ``gitlab_project_members`` module (https://github.com/ansible-collections/community.general/issues/7467). -- gitlab_project_variable - deleted all variables when used with ``purge=true`` due to missing ``raw`` property in KNOWN attributes (https://github.com/ansible-collections/community.general/issues/7250). -- gitlab_protected_branches - fix gitlab constants call in ``gitlab_protected_branches`` module (https://github.com/ansible-collections/community.general/issues/7467). -- gitlab_user - fix gitlab constants call in ``gitlab_user`` module (https://github.com/ansible-collections/community.general/issues/7467). -- icinga2_host - fix a key error when updating an existing host (https://github.com/ansible-collections/community.general/pull/6748). -- ini_file - add the ``follow`` paramter to follow the symlinks instead of replacing them (https://github.com/ansible-collections/community.general/pull/6546). -- ini_file - fix a bug where the inactive options were not used when possible (https://github.com/ansible-collections/community.general/pull/6575). -- ipa_dnszone - fix 'idnsallowsyncptr' key error for reverse zone (https://github.com/ansible-collections/community.general/pull/6906, https://github.com/ansible-collections/community.general/issues/6905). -- kernel_blacklist - simplified the mechanism to update the file, fixing the error (https://github.com/ansible-collections/community.general/pull/7382, https://github.com/ansible-collections/community.general/issues/7362). -- keycloak module util - fix missing ``http_agent``, ``timeout``, and ``validate_certs`` ``open_url()`` parameters (https://github.com/ansible-collections/community.general/pull/7067). -- keycloak module utils - fix ``is_struct_included`` handling of lists of lists/dictionaries (https://github.com/ansible-collections/community.general/pull/6688). -- keycloak module utils - the function ``get_user_by_username`` now return the user representation or ``None`` as stated in the documentation (https://github.com/ansible-collections/community.general/pull/6758). -- keycloak_authentication - fix Keycloak authentication flow (step or sub-flow) indexing during update, if not specified by the user (https://github.com/ansible-collections/community.general/pull/6734). -- keycloak_client inventory plugin - fix missing client secret (https://github.com/ansible-collections/community.general/pull/6931). -- ldap_search - fix string normalization and the ``base64_attributes`` option on Python 3 (https://github.com/ansible-collections/community.general/issues/5704, https://github.com/ansible-collections/community.general/pull/7264). -- locale_gen - now works for locales without the underscore character such as ``C.UTF-8`` (https://github.com/ansible-collections/community.general/pull/6774, https://github.com/ansible-collections/community.general/issues/5142, https://github.com/ansible-collections/community.general/issues/4305). -- lvol - add support for percentage of origin size specification when creating snapshot volumes (https://github.com/ansible-collections/community.general/issues/1630, https://github.com/ansible-collections/community.general/pull/7053). -- lxc connection plugin - now handles ``remote_addr`` defaulting to ``inventory_hostname`` correctly (https://github.com/ansible-collections/community.general/pull/7104). -- lxc connection plugin - properly evaluate options (https://github.com/ansible-collections/community.general/pull/7369). -- machinectl become plugin - mark plugin as ``require_tty`` to automatically disable pipelining, with which this plugin is not compatible (https://github.com/ansible-collections/community.general/issues/6932, https://github.com/ansible-collections/community.general/pull/6935). -- mail - skip headers containing equals characters due to missing ``maxsplit`` on header key/value parsing (https://github.com/ansible-collections/community.general/pull/7303). -- memset module utils - make compatible with ansible-core 2.17 (https://github.com/ansible-collections/community.general/pull/7379). -- nmap inventory plugin - fix ``get_option`` calls (https://github.com/ansible-collections/community.general/pull/7323). -- nmap inventory plugin - now uses ``get_option`` in all cases to get its configuration information (https://github.com/ansible-collections/community.general/pull/7119). -- nmcli - fix bond option ``xmit_hash_policy`` (https://github.com/ansible-collections/community.general/pull/6527). -- nmcli - fix support for empty list (in compare and scrape) (https://github.com/ansible-collections/community.general/pull/6769). -- nsupdate - fix a possible ``list index out of range`` exception (https://github.com/ansible-collections/community.general/issues/836). -- ocapi_utils, oci_utils, redfish_utils module utils - replace ``type()`` calls with ``isinstance()`` calls (https://github.com/ansible-collections/community.general/pull/7501). -- oci_utils module util - fix inappropriate logical comparison expressions and makes them simpler. The previous checks had logical short circuits (https://github.com/ansible-collections/community.general/pull/7125). -- oci_utils module utils - avoid direct type comparisons (https://github.com/ansible-collections/community.general/pull/7085). -- onepassword - fix KeyError exception when trying to access value of a field that is not filled out in OnePassword item (https://github.com/ansible-collections/community.general/pull/7241). -- openbsd_pkg - the pkg_info(1) behavior has changed in OpenBSD >7.3. The error message ``Can't find`` should not lead to an error case (https://github.com/ansible-collections/community.general/pull/6785). -- pacman - module recognizes the output of ``yay`` running as ``root`` (https://github.com/ansible-collections/community.general/pull/6713). -- pipx module utils - change the CLI argument formatter for the ``pip_args`` parameter (https://github.com/ansible-collections/community.general/issues/7497, https://github.com/ansible-collections/community.general/pull/7506). -- portage - fix ``changed_use`` and ``newuse`` not triggering rebuilds (https://github.com/ansible-collections/community.general/issues/6008, https://github.com/ansible-collections/community.general/pull/6548). -- pritunl module utils - fix incorrect URL parameter for orgnization add method (https://github.com/ansible-collections/community.general/pull/7161). -- proxmox - fix error when a configuration had no ``template`` field (https://github.com/ansible-collections/community.general/pull/6838, https://github.com/ansible-collections/community.general/issues/5372). -- proxmox module utils - add logic to detect whether an old Promoxer complains about the ``token_name`` and ``token_value`` parameters and provide a better error message when that happens (https://github.com/ansible-collections/community.general/pull/6839, https://github.com/ansible-collections/community.general/issues/5371). -- proxmox module utils - fix proxmoxer library version check (https://github.com/ansible-collections/community.general/issues/6974, https://github.com/ansible-collections/community.general/issues/6975, https://github.com/ansible-collections/community.general/pull/6980). -- proxmox_disk - fix unable to create ``cdrom`` media due to ``size`` always being appended (https://github.com/ansible-collections/community.general/pull/6770). -- proxmox_kvm - ``absent`` state with ``force`` specified failed to stop the VM due to the ``timeout`` value not being passed to ``stop_vm`` (https://github.com/ansible-collections/community.general/pull/6827). -- proxmox_kvm - ``restarted`` state did not actually restart a VM in some VM configurations. The state now uses the Proxmox reboot endpoint instead of calling the ``stop_vm`` and ``start_vm`` functions (https://github.com/ansible-collections/community.general/pull/6773). -- proxmox_kvm - allow creation of VM with existing name but new vmid (https://github.com/ansible-collections/community.general/issues/6155, https://github.com/ansible-collections/community.general/pull/6709). -- proxmox_kvm - when ``name`` option is provided without ``vmid`` and VM with that name already exists then no new VM will be created (https://github.com/ansible-collections/community.general/issues/6911, https://github.com/ansible-collections/community.general/pull/6981). -- proxmox_pool_member - absent state for type VM did not delete VMs from the pools (https://github.com/ansible-collections/community.general/pull/7464). -- proxmox_tasks_info - remove ``api_user`` + ``api_password`` constraint from ``required_together`` as it causes to require ``api_password`` even when API token param is used (https://github.com/ansible-collections/community.general/issues/6201). -- proxmox_template - require ``requests_toolbelt`` module to fix issue with uploading large templates (https://github.com/ansible-collections/community.general/issues/5579, https://github.com/ansible-collections/community.general/pull/6757). -- proxmox_user_info - avoid direct type comparisons (https://github.com/ansible-collections/community.general/pull/7085). -- redfish_command - fix usage of message parsing in ``SimpleUpdate`` and ``MultipartHTTPPushUpdate`` commands to treat the lack of a ``MessageId`` as no message (https://github.com/ansible-collections/community.general/issues/7465, https://github.com/ansible-collections/community.general/pull/7471). -- redfish_info - fix ``ListUsers`` to not show empty account slots (https://github.com/ansible-collections/community.general/issues/6771, https://github.com/ansible-collections/community.general/pull/6772). -- redhat_subscription - use the right D-Bus options for the consumer type when - registering a RHEL system older than 9 or a RHEL 9 system older than 9.2 - and using ``consumer_type`` - (https://github.com/ansible-collections/community.general/pull/7378). -- refish_utils module utils - changing variable names to avoid issues occuring when fetching Volumes data (https://github.com/ansible-collections/community.general/pull/6883). -- rhsm_repository - when using the ``purge`` option, the ``repositories`` - dictionary element in the returned JSON is now properly updated according - to the pruning operation - (https://github.com/ansible-collections/community.general/pull/6676). -- rundeck - fix ``TypeError`` on 404 API response (https://github.com/ansible-collections/community.general/pull/6983). -- selective callback plugin - fix length of task name lines in output always being 3 characters longer than desired (https://github.com/ansible-collections/community.general/pull/7374). -- snap - an exception was being raised when snap list was empty (https://github.com/ansible-collections/community.general/pull/7124, https://github.com/ansible-collections/community.general/issues/7120). -- snap - assume default track ``latest`` in parameter ``channel`` when not specified (https://github.com/ansible-collections/community.general/pull/6835, https://github.com/ansible-collections/community.general/issues/6821). -- snap - change the change detection mechanism from "parsing installation" to "comparing end state with initial state" (https://github.com/ansible-collections/community.general/pull/7340, https://github.com/ansible-collections/community.general/issues/7265). -- snap - fix crash when multiple snaps are specified and one has ``---`` in its description (https://github.com/ansible-collections/community.general/pull/7046). -- snap - fix the processing of the commands' output, stripping spaces and newlines from it (https://github.com/ansible-collections/community.general/pull/6826, https://github.com/ansible-collections/community.general/issues/6803). -- sorcery - fix interruption of the multi-stage process (https://github.com/ansible-collections/community.general/pull/7012). -- sorcery - fix queue generation before the whole system rebuild (https://github.com/ansible-collections/community.general/pull/7012). -- sorcery - latest state no longer triggers update_cache (https://github.com/ansible-collections/community.general/pull/7012). -- terraform - prevents ``-backend-config`` option double encapsulating with ``shlex_quote`` function. (https://github.com/ansible-collections/community.general/pull/7301). -- tss lookup plugin - fix multiple issues when using ``fetch_attachments=true`` (https://github.com/ansible-collections/community.general/pull/6720). -- zypper - added handling of zypper exitcode 102. Changed state is set correctly now and rc 102 is still preserved to be evaluated by the playbook (https://github.com/ansible-collections/community.general/pull/6534). - -community.grafana -~~~~~~~~~~~~~~~~~ - -- Fix error with datasources configured without basicAuth -- grafana_folder, fix an issue during delete (starting Grafana 9.3) - -community.hashi_vault -~~~~~~~~~~~~~~~~~~~~~ - -- vault_write - the ``vault_write`` lookup and module were not able to write data containing keys named ``path`` or ``wrap_ttl`` due to a bug in the ``hvac`` library. These plugins have now been updated to take advantage of fixes in ``hvac>=1.2`` to address this (https://github.com/ansible-collections/community.hashi_vault/issues/389). - -community.hrobot -~~~~~~~~~~~~~~~~ - -- Show more information (if available) from error messages (https://github.com/ansible-collections/community.hrobot/pull/89). - -community.libvirt -~~~~~~~~~~~~~~~~~ - -- libvirt_qemu - connection plugin threw a warning about an improperly configured remote target. Fix adds `inventory_hostname` to `options.remote_addr.vars` (https://github.com/ansible-collections/community.libvirt/pull/147). -- libvirt_qemu - fix encoding errors on Windows guests for non-ASCII return values (https://github.com/ansible-collections/community.libvirt/pull/157) -- virt - fix virt module to undefine a domain with nvram, managed_save, snapshot_metadata or checkpoints_metadata (https://github.com/ansible-collections/community.libvirt/issues/40). -- virt_pool - replace discouraged function ``listAllVolumes`` with ``listAllVolumes`` to fix potential race conditions (https://github.com/ansible-collections/community.libvirt/pull/135). -- virt_pool - replace discouraged functions ``listStoragePools`` and ``listDefinedStoragePools`` with ``listAllStoragePools`` to fix potential race conditions (https://github.com/ansible-collections/community.libvirt/pull/134). - -community.mysql -~~~~~~~~~~~~~~~ - -- mysql module utils - use the connection arguments ``db`` instead of ``database`` and ``passwd`` instead of ``password`` when running with MySQLdb < 2.0.0 (https://github.com/ansible-collections/community.mysql/pull/553). - -community.network -~~~~~~~~~~~~~~~~~ - -- cnos_l3_interface - fix import errors (https://github.com/ansible-collections/community.network/pull/531). -- exos_config - missing whitespace in command with ``defaults: True``. It happened because the command is ``show configurationdetail`` instead of ``show configuration detail`` (https://github.com/ansible-collections/community.network/pull/516). -- exos_facts - returns timeout error when we use connection type ``network_cli``. It happened because we send command without ``no-refresh`` and script ``cli2json.py`` stuck in loop while reading console output (https://github.com/ansible-collections/community.network/pull/517). -- icx_l3_interface - fix import errors (https://github.com/ansible-collections/community.network/pull/531). -- slxos_l3_interface - fix import errors (https://github.com/ansible-collections/community.network/pull/531). - -community.postgresql -~~~~~~~~~~~~~~~~~~~~ - -- postgresql_db - when the task is completed successfully, close the database connection (https://github.com/ansible-collections/community.postgresql/issues/465). -- postgresql_ext - fixed queries return value name in documentation (https://github.com/ansible-collections/community.postgresql/pull/545). -- postgresql_info - fix SQL syntax issue (https://github.com/ansible-collections/community.postgresql/issues/570). -- postgresql_info - when the task is completed successfully, close the database connection (https://github.com/ansible-collections/community.postgresql/issues/465). -- postgresql_ping - when the task is completed successfully, close the database connection (https://github.com/ansible-collections/community.postgresql/issues/465). -- postgresql_privs - fixed error message and documentation (https://github.com/ansible-collections/community.postgresql/pull/510). -- postgresql_privs - when the task is completed successfully, close the database connection (https://github.com/ansible-collections/community.postgresql/issues/465). -- postgresql_set - fixed GUC_LIST_QUOTE parameters (https://github.com/ansible-collections/community.postgresql/pull/521). -- postgresql_set - fixed error message in param_set function (https://github.com/ansible-collections/community.postgresql/pull/505). - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- api_info, api_modify - in the ``snmp`` path, ensure that ``engine-id-suffix`` is only available on RouterOS 7.10+, and that ``engine-id`` is read-only on RouterOS 7.10+ (https://github.com/ansible-collections/community.routeros/issues/208, https://github.com/ansible-collections/community.routeros/pull/218). -- api_modify, api_info - add missing parameter ``engine-id-suffix`` for the ``snmp`` path (https://github.com/ansible-collections/community.routeros/issues/189, https://github.com/ansible-collections/community.routeros/pull/190). -- api_modify, api_info - add missing parameter ``tls`` for the ``tool e-mail`` path (https://github.com/ansible-collections/community.routeros/issues/179, https://github.com/ansible-collections/community.routeros/pull/180). -- facts - do not crash in CLI output preprocessing in unexpected situations during line unwrapping (https://github.com/ansible-collections/community.routeros/issues/170, https://github.com/ansible-collections/community.routeros/pull/177). - -community.sops -~~~~~~~~~~~~~~ - -- Avoid pre-releases when picking the latest version when using the GitHub API method (https://github.com/ansible-collections/community.sops/pull/159). -- Fix RPM URL for the 3.8.0 release (https://github.com/ansible-collections/community.sops/pull/161). -- Fix changed DEB and RPM URLs for 3.8.0 and its prerelease(s) (https://github.com/ansible-collections/community.sops/pull/159). -- install role - fix ``sops_github_latest_detection=latest-release``, which broke due to sops moving to another GitHub organization (https://github.com/ansible-collections/community.sops/pull/151). -- install role - make sure that the ``pkg_mgr`` fact is definitely available when installing on ``localhost``. This can improve error messages in some cases (https://github.com/ansible-collections/community.sops/issues/145, https://github.com/ansible-collections/community.sops/pull/146). -- sops_encrypt - ensure that output-type is set to ``yaml`` when the file extension ``.yml`` is used. Now both ``.yaml`` and ``.yml`` files use the SOPS ``--output-type=yaml`` formatting (https://github.com/ansible-collections/community.sops/issues/164). - -community.vmware -~~~~~~~~~~~~~~~~ - -- Add missing modules to runtime.yml (https://github.com/ansible-collections/community.vmware/pull/1764). -- fix problem when module try apply non global or non VM type custom attribute to VM object (https://github.com/ansible-collections/community.vmware/issues/1772) -- vmware_deploy_ovf - Fix an issue with networks that are available on more than one cluster (https://github.com/ansible-collections/community.vmware/issues/1590). -- vmware_deploy_ovf - fix error in finding networks part of code (https://github.com/ansible-collections/community.vmware/issues/1853). -- vmware_deploy_ovf: fix error in finding networks part of code https://github.com/ansible-collections/community.vmware/issues/1853 -- vmware_guest_custom_attributes - fix problem when module try apply non global or non VM type custom attribute to VM object (https://github.com/ansible-collections/community.vmware/issues/1772). -- vmware_guest_disk - Fix idempotency for `absent` disks (https://github.com/ansible-collections/community.vmware/issues/1765). -- vmware_vm_info - Add missing show_folder parameter (https://github.com/ansible-collections/community.vmware/issues/1709). - -community.windows -~~~~~~~~~~~~~~~~~ - -- win_psmodule - fix requireLicenseAcceptance test so that it is no longer always true - -community.zabbix -~~~~~~~~~~~~~~~~ - -- Proxy and Agent Roles - Added `zabbix_api_use_ssl` variable to allow secure API connections -- Web Role - Added defaults and documentation for `zabbix_apache_custom_includes` -- agent - Handled undefined variable error for Windows default versions -- agent role - Added missing become statement to allow run to role as nonroot -- all roles - Added option to selectively disable a repo on Redhat installs -- zabbix_host module - fix updating hosts that were discovered via LLD -- zabbix_proxy role - failed at version validation. Fix adds cast of zabbix_proxy_version to float, similarly to the other roles. -- zabbix_proxy role - undefined vars at updating proxy definition. Fix adds null defaults for zabbix_proxy_tlsaccept and zabbix_proxy_tlsconnect. -- zabbix_web role - removed 'ssl on;' nginx configuration, which is no longer supported since nginx version 1.25.1. - -containers.podman -~~~~~~~~~~~~~~~~~ - -- Add hooks-dir parameter for containers -- Add idempotency for restart-policy for containers -- Add missing options to podman network -- Add more explanation about cmd_args command usage -- Add stdout to podman build and push actions -- Added support for "userns" parameter to "play" module -- CI - fix pip installation of the collection -- CI - fix podman play job for 4.4.x versions -- Change yes/no to true/false in the modules -- Convert str to json format before evaluating length. -- Fix CI for newest Ansible branch 2.16 -- Fix common file for Python 2.7 -- Fix idempotency for pods with uidmap and gidmap -- Fix idempotency lowercase for devices -- Fix network tests for Podman v4 -- Fix podman logout tests for v4 -- Fix pylint issues for CI ansible-test -- Fix undesirable splitting of IPv6 host addresses -- Improved documentation of `podman_generate_systemd` module -- Prepare CI for Podman v3 backward compatibility -- Support SHA256 tag for podman images -- Update podman_image to specify CPU arch when pulling image -- added podman_prune module -- become plugin podman_unshare become_user default -- fix for buildah improper remote target -- for pod kube recreate -- pod - Support passing multiple networks with params -- podman-login - fix FIPS md5 issue and registry requirement -- podman-pod - Fix idempotency for pods in 4.4.x versions -- podman_container - Add diff and change detection to systemd generation -- podman_container - Add example with quotes in command to docs -- podman_container - Fix healthcheck issue where defined in image -- podman_container - Fix idempoency issue with PID of container -- podman_container - Fix idempotency for RestartPolicy when MaximumRetryCount -- podman_container - Fix idempotency for devices -- podman_container - Fixed idempotency with cpus parameter -- podman_container - Improve docs about container env_file on remote machine -- podman_container - added cpu_quota parameter to podman_container -- podman_export,podman_import - Adding volume import and export option -- podman_generate_systemd - Add a force field to podman_generate_systemd -- podman_image - Add restart-sec and other options to systemd generation -- podman_image - Fix pulling short image name -- podman_network - Do not force network removal by default -- podman_network - Fix network DNS enable idempotency issue -- podman_pod - Fix idempotency when running inside Podman container -- podman_systemd - Ignore header when comparing systemd files content - -dellemc.enterprise_sonic -~~~~~~~~~~~~~~~~~~~~~~~~ - -- Fix regression test bugs in multiple modules (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/180). -- Fix sanity check errors in the collection caused by Ansible library changes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/160). -- install - Update the required ansible.netcommon version (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/176). -- sonic_bgp_af - Fix issue with vnis and advertise modification for a single BGP AF (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/201). -- sonic_bgp_as_paths - Fix issues with merged and deleted states (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/250). -- sonic_interfaces - Fix command timeout issue (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/261). -- sonic_l3_interfaces - Fix IP address deletion issue (GitHub issue#170) (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/231). -- sonic_lag_interfaces - Fix port name issue (GitHub issue#153) (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/119). -- sonic_neighbors - Fix handling of default attributes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/233). -- sonic_ntp - Fix the issue (GitHub issue#205) with NTP clear all without config given (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/224). -- sonic_vlan_mapping - Remove platform checks (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/262). -- sonic_vrfs - Add tasks as a workaround to mgmt VRF bug (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/146). -- sonic_vrfs - Fix spacing issue in CLI test case (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/257). -- sonic_vrfs - Fix the issue (GitHub issue#194) with VRF when deleting interface(https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/230). -- sonic_vxlans - Remove required_together restriction for evpn_nvo and source_ip attributes (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/130). -- workflows - Fix dependency installation issue in the code coverage workflow (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/199). - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- Job tracking is fixed for iDRAC SCP import (https://github.com/dell/dellemc-openmanage-ansible-modules/pull/504). -- OMSDK is handled for import error ``SNIMissingWarning`` that is undefined (https://github.com/dell/omsdk/issues/33). -- The Chassis Power PIN value must be of six numerical digits input from the module. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/492). -- Update document on how to use with ansible. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/393). -- idrac_attributes module can now support modification of IPv6 attributes on iDRAC 8. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/488). -- idrac_firmware - Issue(276335) - This module fails on the Python 3.11.x version with NFS share. Use a different Python version or Share type. -- idrac_server_config_profile - The import for Server Configuration Profile (SCP) operation fails to handle the absence of a file and incorrectly reports success instead of the expected failure. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/544). -- ome_device_info is limited to 50 responses with a query filter. (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/499). -- ome_device_quick_deploy - If the blade is not present, then the module can assign a static IP to the slot (https://github.com/dell/dellemc-openmanage-ansible-modules/issues/532). - -f5networks.f5_modules -~~~~~~~~~~~~~~~~~~~~~ - -- bigip_device_certificate - error-handling for connection error while running exec command function to fetch certificate details -- bigip_pool - Resolved a bug in the code to allow the module to remove monitors from the pool -- bigip_provision_async - created module to address scenarios where infinite loops or timeouts happen -- bigip_ssl_key_cert - fixed flaw in code to make module work with same key and cert name when true_names set to true -- bigip_virtual_server - fixed an idempotency bug where the module send asm policy profile for update even when not specified explicitly by the user - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- Add 'access_token' in 'fmgr_generic'. -- Add param 'platform' in 'fmgr_wtpprofile' and param 'interface' in 'fmgr_fsp_vlan'. -- Corrected description of parameters in documentation. -- Fix a bug that collection may update the resource when it does not need to. -- Fix a bug where the user may not be able to use workspace_locking_adom if the workspace mode is per-adom. -- Fix some modules missing revision (used for version warning). -- Fixed Many sanity test warnings and errors. -- Fixed a bug where users might not be able to login. -- Fixed the bug that would report an error when providing access_token and username/password at the same time. -- Fixed version_added in the document. The value of this parameter is the version each module first supported in the FortiManager Ansible Collection. -- Improve document. -- Improve fmgr_fact. 'changed' will not be true anymore if you get the result. -- Improve login logic in httpapi plugin. -- Improve sanity tests. -- When the JSON data sent by FortiManager is not in the right format, the collection can still execute correctly. - -fortinet.fortios -~~~~~~~~~~~~~~~~ - -- Fix the error of pure number password. -- Fix the hyperlink issue for the supported FOS versions in USER's GUIDE. -- Fix the issue of one session remaining open after the task is finished. -- Fix the issue while comparing the changes in before and after data in check_mode; -- Fix the issues that some parameters are not in a specific fos vm versions. -- Fix the request error when updating global object; -- Fix the sanity test error; -- Fix the wrong credential error when using username/password in fos verion 6; -- To optimize the json_generic module and reduce the time spent while sending GET requests. - -google.cloud -~~~~~~~~~~~~ - -- Use default service account if `service_account_email` is unset. - -hetzner.hcloud -~~~~~~~~~~~~~~ - -- `*_info` - Consistently fail on invalid ID in `*_info` modules. -- hcloud_firewall - The port argument is required when the firewall rule protocol is `udp` or `tcp`. -- hcloud_image_info Fix facts modules deprecated result key -- hcloud_load_balancer_service - In the returned data, the invalid `health_check.http.certificates` field was renamed to `health_check.http.status_codes`. -- hcloud_location_info Fix facts modules deprecation warnings -- hcloud_server - Fix string formatting error on deprecated server type warning -- hcloud_server - TypeError when trying to use deprecated image with allow_deprecated_image -- hcloud_server_type_info Fix facts modules deprecated result dict -- hcloud_server_type_info Fix facts modules deprecation warnings - -junipernetworks.junos -~~~~~~~~~~~~~~~~~~~~~ - -- fix `no_advertise_adjacency_segment` config implementation. -- fix `no_eligible_backup` config implementation. -- fix `no_eligible_remote_backup` config implementation. -- fix `no_interface_state_traps` config implementation. -- fix `no_neighbor_down_notification` config implementation. -- fix `node_link_protection` implementation. -- fix md5 authentication which allows list of keys to be configured. - -microsoft.ad -~~~~~~~~~~~~ - -- Added the missing dependency ``dpapi-ng`` to Ansible Execution Environments requirements file for LAPS decryption support -- Ensure renaming and moving an object will be done with the ``domain_server`` and ``domain_username`` credentials specified - https://github.com/ansible-collections/microsoft.ad/issues/54 -- Fix up ``protect_from_deletion`` when creating new AD objects - https://github.com/ansible-collections/microsoft.ad/issues/47 -- Fix up date_time attribute comparisons to be idempotent - https://github.com/ansible-collections/microsoft.ad/issues/57 -- group - Fix idempotency check when ``scope: domainlocal`` is set - https://github.com/ansible-collections/microsoft.ad/issues/31 -- microsoft.ad.group - ensure the ``scope`` and ``category`` values are checked as case insensitive to avoid changes when not needed - https://github.com/ansible-collections/microsoft.ad/issues/31 -- microsoft.ad.user - Ensure the ``spn`` diff after key is ``spn`` and not ``kerberos_encryption_types`` -- microsoft.ad.user - treat an expired account as a password that needs to be changed - -netapp.ontap -~~~~~~~~~~~~ - -- na_ontap_dns - fix DNS not working with Cluster mode. -- na_ontap_dns - fix keyerror for uuid when DNS is set to vserver in REST. -- na_ontap_ems_filter - fix delete operation not idempotent for filter. -- na_ontap_ems_filter - fix modify operation to add rule in existing filter. -- na_ontap_login_messages - fix ``banner`` and ``motd_message`` not idempotent when trailing '\n' is present. -- na_ontap_login_messages - fix idempotency issue in Cluster scope in REST. -- na_ontap_login_messages - fix idempotent issue on ``show_cluster_motd`` option when try to set banner or motd_message for the first time in REST. -- na_ontap_nfs - fix `default_user` under `windows` not getting modified if not set previously in REST. -- na_ontap_svm - fix REST version warning for `ndmp` under `services`. -- na_ontap_volume - fix invalid field error with 'space.snapshot.autodelete' in REST. - -netbox.netbox -~~~~~~~~~~~~~ - -- Fix schema caching [#1053](https://github.com/netbox-community/ansible_modules/pull/1053) -- netbox_ device - Adjust device_role to role for NetBox 3.6 [#1066](https://github.com/netbox-community/ansible_modules/pull/1066) - -ovirt.ovirt -~~~~~~~~~~~ - -- HE - add back dependency on python3-jmespath (https://github.com/oVirt/ovirt-ansible-collection/pull/701) -- HE - drop remaining filters using netaddr (https://github.com/oVirt/ovirt-ansible-collection/pull/702) -- HE - drop usage of ipaddr filters and remove dependency on python-netaddr (https://github.com/oVirt/ovirt-ansible-collection/pull/696) -- HE - fix ipv4 and ipv6 check after dropping netaddr (https://github.com/oVirt/ovirt-ansible-collection/pull/704) -- hosted_engine_setup - Update README (https://github.com/oVirt/ovirt-ansible-collection/pull/706) -- ovirt_disk - Fix issue in detaching the direct LUN (https://github.com/oVirt/ovirt-ansible-collection/pull/700) -- ovirt_quota - Convert storage size to integer (https://github.com/oVirt/ovirt-ansible-collection/pull/712) -- ovirt_role - Fix administrative option when set to False (https://github.com/oVirt/ovirt-ansible-collection/pull/723). - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purefa_certs - Resolved CSR issue and require export_file for state sign. -- purefa_ds - Fixes error when enabling directory services while a bind_user is set on the array and a bind_password is not. -- purefa_ds - Fixes issue with creating a new ds configuration while setting force_bind_password as "false". -- purefa_host - Fix incorrect calling of "module.params". -- purefa_info - Added missing alerts subset name -- purefa_info - Fix serial number generation issue for vVols -- purefa_info - Fixed attribute errors after EUC changes -- purefa_info - Fixed issue with replica links in unknown state -- purefa_info - Fixed missing arguments for google_offload and pods -- purefa_info - Fixed parameter error when enabled and disabled timers are different values on purity 6.4.10+ arrays. -- purefa_info - Fixed py39 specific bug with multiple DNS entries -- purefa_network - Allow `gateway` to be set as `0.0.0.0` to remove an existing gateway address -- purefa_network - Fixed IPv6 support issues -- purefa_network - Fixed idempotency issue when gateway not modified -- purefa_pgsched - Fixed bug with an unnecessary substitution -- purefa_pgsched - Resolved idempotency issue with snap and replication enabled flags -- purefa_pgsnap - Enabled to eradicate destroyed snapshots. -- purefa_pgsnap - Ensure that `now` and `remote` are mutually exclusive. -- purefa_pgsnap - Fixed issue with eradicating deleted pgsnapshot -- purefa_pgsnap - Update the accepted suffixes to include also numbers only. Fixed the logic to retrieve the latest completed snapshot -- purefa_policy - Set user_mapping parameter default to True -- purefa_snap - Fixed incorrect calling logic causing failure on remote snapshot creation -- purefa_snap - Fixed issue with remote snapshot retrieve. Mainly a workaround to an issue with Purity REST 1.x when remote snapshots are searched. -- purefa_subnet - Fixed IPv4 gateway removal issue. -- purefa_subnet - Fixed IPv6 support issues. -- purefa_volume - Fixed bug with NULL suffix for multiple volume creation. - -purestorage.flashblade -~~~~~~~~~~~~~~~~~~~~~~ - -- purefb_bucket - Fixed bucket type mode name typo -- purefb_fs - Fixed issue with incorrect promotion state setting -- purefb_info - Fixed missing atributes for SMB client policy rules -- purefb_userpolicy - Fixed `show` state for all user policies - -purestorage.fusion -~~~~~~~~~~~~~~~~~~ - -- fusion_info - fix runtime errors caused when listing `interfaces`, `arrays` and `snapshots` dicts -- fusion_pg - freshly created placement group is now moved to correct array -- fusion_pp - 'local_rpo' changed to accept same input as 'local_retention' -- fusion_pp - updated retention description -- fusion_ra - 'name' deprecated and aliased to 'role' - -t_systems_mms.icinga_director -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- add icinga_deploy_* to action_group and test it (https://github.com/T-Systems-MMS/ansible-collection-icinga-director/pull/214) - -theforeman.foreman -~~~~~~~~~~~~~~~~~~ - -- compute_profile, host - properly support nested VMware clusters (https://bugzilla.redhat.com/show_bug.cgi?id=2211394) -- content_credential - don't require ``content_type`` and ``content`` parameters when removing credentials (https://github.com/theforeman/foreman-ansible-modules/issues/1588) -- content_credentials role - don't require ``content_type`` and ``content`` parameters when removing credentials -- content_view_filter - don't fail when creating a modulemd filter (https://github.com/theforeman/foreman-ansible-modules/issues/1608, https://bugzilla.redhat.com/show_bug.cgi?id=2208557) -- content_view_publish role - correctly pass ``version`` not ``description`` to the module (https://bugzilla.redhat.com/show_bug.cgi?id=2234444) -- convert2rhel role - Sync repos before CV publish (https://bugzilla.redhat.com/show_bug.cgi?id=2216907) -- repositories role - don't log repository information when creating products (https://bugzilla.redhat.com/show_bug.cgi?id=2183357) -- repository - don't fail when removing a content credential from a repository (https://bugzilla.redhat.com/show_bug.cgi?id=2224122) -- smart_class_parameter - correctly allow setting ``override`` to ``false`` (https://github.com/theforeman/foreman-ansible-modules/issues/1644) - -vultr.cloud -~~~~~~~~~~~ - -- firewall_rule - Fixed an idempotency issue if parameter ``port`` is set on protocols other than TCP/UDP (https://github.com/vultr/ansible-collection-vultr/issues/76). - -vyos.vyos -~~~~~~~~~ - -- vyos-l3_interface_facts - fixed error when using no-default-link-local option. (https://github.com/ansible-collections/vyos.vyos/issues/295) - -Known Issues ------------- - -Ansible-core -~~~~~~~~~~~~ - -- ansible-galaxy - dies in the middle of installing a role when that role contains Java inner classes (files with $ in the file name). This is by design, to exclude temporary or backup files. (https://github.com/ansible/ansible/pull/81553). -- ansible-test - The ``pep8`` sanity test is unable to detect f-string spacing issues (E201, E202) on Python 3.10 and 3.11. They are correctly detected under Python 3.12. See (https://github.com/PyCQA/pycodestyle/issues/1190). - -community.crypto -~~~~~~~~~~~~~~~~ - -- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/crypto/. - -community.dns -~~~~~~~~~~~~~ - -- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/dns/. - -community.docker -~~~~~~~~~~~~~~~~ - -- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/docker/. - -community.general -~~~~~~~~~~~~~~~~~ - -- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/general/ (https://github.com/ansible-collections/community.general/pull/6539). - -community.hrobot -~~~~~~~~~~~~~~~~ - -- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/hrobot/. - -community.routeros -~~~~~~~~~~~~~~~~~~ - -- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/routeros/. - -community.sops -~~~~~~~~~~~~~~ - -- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/sops/. - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- ca_path missing - Issue(275740) - The roles idrac_attributes, redfish_storage_volume, and idrac_server_powerstate have a missing parameter ca_path. -- idrac_firmware - Issue(276335) - This module fails on the Python 3.11.x version with NFS shares. Use a different Python version or Share type. -- idrac_firmware - Issue(279282) - This module does not support firmware update using HTTP, HTTPS, and FTP shares with authentication on iDRAC8. -- idrac_network_attributes - Issue(279049) - If unsupported values are provided for the parameter ``ome_network_attributes``, then this module does not provide a correct error message. -- idrac_redfish_storage_controller - Issue(256164) - If incorrect value is provided for one of the attributes in the provided attribute list for controller configuration, then this module does not exit with error. -- ome_device_network_services - Issue(212681) - The module does not provide a proper error message if unsupported values are provided for the following parameters- port_number, community_name, max_sessions, max_auth_retries, and idle_timeout. -- ome_device_power_settings - Issue(212679) - The module displays the following message if the value provided for the parameter ``power_cap`` is not within the supported range of 0 to 32767, ``Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI.`` -- ome_device_quick_deploy - Issue(275231) - This module does not deploy a new configuration to a slot that has disabled IPv6. -- ome_smart_fabric_uplink - Issue(186024) - Despite the module supported by OpenManage Enterprise Modular, it does not allow the creation of multiple uplinks of the same name. If an uplink is created using the same name as an existing uplink, the existing uplink is modified. - -New Plugins ------------ - -Cliconf -~~~~~~~ - -- ansible.netcommon.default - General purpose cliconf plugin for new platforms - -Filter -~~~~~~ - -- ansible.utils.ipcut - This filter is designed to get 1st or last few bits of IP address. -- ansible.utils.ipv6form - This filter is designed to convert ipv6 address in different formats. For example expand, compressetc. -- community.crypto.gpg_fingerprint - Retrieve a GPG fingerprint from a GPG public or private key - -Inventory -~~~~~~~~~ - -- community.aws.aws_mq - MQ broker inventory source - -Lookup -~~~~~~ - -- community.crypto.gpg_fingerprint - Retrieve a GPG fingerprint from a GPG public or private key file -- community.dns.lookup - Look up DNS records -- community.dns.lookup_as_dict - Look up DNS records as dictionaries -- community.general.bitwarden_secrets_manager - Retrieve secrets from Bitwarden Secrets Manager - -New Modules ------------ - -amazon.aws -~~~~~~~~~~ - -- amazon.aws.ec2_import_image - Manage AWS EC2 import image tasks -- amazon.aws.ec2_import_image_info - Gather information about import virtual machine tasks -- amazon.aws.ec2_key_info - Gather information about EC2 key pairs in AWS -- amazon.aws.iam_instance_profile - manage IAM instance profiles -- amazon.aws.iam_instance_profile_info - gather information on IAM instance profiles -- amazon.aws.rds_global_cluster_info - Obtain information about Aurora global database clusters - -cisco.ios -~~~~~~~~~ - -- cisco.ios.ios_service - Resource module to configure service. - -cisco.iosxr -~~~~~~~~~~~ - -- cisco.iosxr.iosxr_bgp_templates - Manages BGP templates resource module. - -cisco.nxos -~~~~~~~~~~ - -- cisco.nxos.nxos_fc_interfaces - Fc Interfaces resource module - -cloudscale_ch.cloud -~~~~~~~~~~~~~~~~~~~ - -- cloudscale_ch.cloud.load_balancer - Manages load balancers on the cloudscale.ch IaaS service -- cloudscale_ch.cloud.load_balancer_health_monitor - Manages load balancers on the cloudscale.ch IaaS service -- cloudscale_ch.cloud.load_balancer_listener - Manages load balancer listeners on the cloudscale.ch IaaS service -- cloudscale_ch.cloud.load_balancer_pool - Manages load balancer pools on the cloudscale.ch IaaS service -- cloudscale_ch.cloud.load_balancer_pool_member - Manages load balancer pool members on the cloudscale.ch IaaS service - -community.aws -~~~~~~~~~~~~~ - -- community.aws.route53_wait - wait for changes in Amazons Route 53 DNS service to propagate - -community.dns -~~~~~~~~~~~~~ - -- community.dns.nameserver_info - Look up nameservers for a DNS name -- community.dns.nameserver_record_info - Look up all records of a type from all nameservers for a DNS name - -community.general -~~~~~~~~~~~~~~~~~ - -- community.general.consul_policy - Manipulate Consul policies -- community.general.consul_role - Manipulate Consul roles -- community.general.facter_facts - Runs the discovery program C(facter) on the remote system and return Ansible facts -- community.general.gio_mime - Set default handler for MIME type, for applications using Gnome GIO -- community.general.gitlab_instance_variable - Creates, updates, or deletes GitLab instance variables -- community.general.gitlab_merge_request - Create, update, or delete GitLab merge requests -- community.general.jenkins_build_info - Get information about Jenkins builds -- community.general.keycloak_authentication_required_actions - Allows administration of Keycloak authentication required actions -- community.general.keycloak_authz_custom_policy - Allows administration of Keycloak client custom Javascript policies via Keycloak API -- community.general.keycloak_authz_permission - Allows administration of Keycloak client authorization permissions via Keycloak API -- community.general.keycloak_authz_permission_info - Query Keycloak client authorization permissions information -- community.general.keycloak_realm_key - Allows administration of Keycloak realm keys via Keycloak API -- community.general.keycloak_user - Create and configure a user in Keycloak -- community.general.lvg_rename - Renames LVM volume groups -- community.general.pnpm - Manage node.js packages with pnpm -- community.general.proxmox_pool - Pool management for Proxmox VE cluster -- community.general.proxmox_pool_member - Add or delete members from Proxmox VE cluster pools -- community.general.proxmox_vm_info - Retrieve information about one or more Proxmox VE virtual machines -- community.general.simpleinit_msb - Manage services on Source Mage GNU/Linux - -community.grafana -~~~~~~~~~~~~~~~~~ - -- community.grafana.grafana_organization_user - Manage Grafana Organization Users. - -community.vmware -~~~~~~~~~~~~~~~~ - -- community.vmware.vcenter_root_password_expiration - root password expiration of vCSA -- community.vmware.vmware_cluster_drs_recommendations - Apply DRS Recommendations -- community.vmware.vmware_host_graphics - Manage Host Graphic Settings -- community.vmware.vmware_vasa - Manage VMware Virtual Volumes storage provider -- community.vmware.vmware_vasa_info - Gather information about vSphere VASA providers. -- community.vmware.vmware_vsan_release_catalog - Uploads the vSAN Release Catalog - -community.zabbix -~~~~~~~~~~~~~~~~ - -- community.zabbix.zabbix_regexp - Create/update/delete Zabbix regular expression -- community.zabbix.zabbix_settings - Update Zabbix global settings. -- community.zabbix.zabbix_token - Create/Update/Generate/Delete Zabbix token. - -containers.podman -~~~~~~~~~~~~~~~~~ - -- containers.podman.podman_container_exec - Executes a command in a running container -- containers.podman.podman_runlabel - Run given label from given image - -dellemc.enterprise_sonic -~~~~~~~~~~~~~~~~~~~~~~~~ - -- dellemc.enterprise_sonic.sonic_acl_interfaces - Manage access control list (ACL) to interface binding on SONiC -- dellemc.enterprise_sonic.sonic_bfd - Manage BFD configuration on SONiC -- dellemc.enterprise_sonic.sonic_copp - Manage CoPP configuration on SONiC -- dellemc.enterprise_sonic.sonic_dhcp_relay - Manage DHCP and DHCPv6 relay configurations on SONiC -- dellemc.enterprise_sonic.sonic_ip_neighbor - Manage IP neighbor global configuration on SONiC -- dellemc.enterprise_sonic.sonic_l2_acls - Manage Layer 2 access control lists (ACL) configurations on SONiC -- dellemc.enterprise_sonic.sonic_l3_acls - Manage Layer 3 access control lists (ACL) configurations on SONiC -- dellemc.enterprise_sonic.sonic_lldp_global - Manage Global LLDP configurations on SONiC -- dellemc.enterprise_sonic.sonic_logging - Manage logging configuration on SONiC -- dellemc.enterprise_sonic.sonic_mac - Manage MAC configuration on SONiC -- dellemc.enterprise_sonic.sonic_port_group - Manages port group configuration on SONiC -- dellemc.enterprise_sonic.sonic_route_maps - route map configuration handling for SONiC -- dellemc.enterprise_sonic.sonic_vlan_mapping - Configure vlan mappings on SONiC - -dellemc.openmanage -~~~~~~~~~~~~~~~~~~ - -- dellemc.openmanage.idrac_network_attributes - This module allows you to configure the port and partition network attributes on the network interface cards. -- dellemc.openmanage.ome_alert_policies - Manage OME alert policies. -- dellemc.openmanage.ome_alert_policies_action_info - Get information on actions of alert policies. -- dellemc.openmanage.ome_alert_policies_category_info - Retrieves information of all OME alert policy categories. -- dellemc.openmanage.ome_alert_policies_info - Retrieves information of one or more OME alert policies. -- dellemc.openmanage.ome_alert_policies_message_id_info - Get message ID information of alert policies. -- dellemc.openmanage.redfish_firmware_rollback - To perform a component firmware rollback using component name. - -dellemc.powerflex -~~~~~~~~~~~~~~~~~ - -- dellemc.powerflex.snapshot_policy - Manage snapshot policies on Dell PowerFlex - -dellemc.unity -~~~~~~~~~~~~~ - -- dellemc.unity.replication_session - Manage replication session on the Unity storage system - -f5networks.f5_modules -~~~~~~~~~~~~~~~~~~~~~ - -- f5networks.f5_modules.bigip_provision_async - Manage BIG-IP module provisioning - -fortinet.fortimanager -~~~~~~~~~~~~~~~~~~~~~ - -- fortinet.fortimanager.fmgr_application_casi_profile - Cloud Access Security Inspection. -- fortinet.fortimanager.fmgr_application_casi_profile_entries - Application entries. -- fortinet.fortimanager.fmgr_application_internetservice - Show Internet service application. -- fortinet.fortimanager.fmgr_application_internetservice_entry - Entries in the Internet service database. -- fortinet.fortimanager.fmgr_application_internetservicecustom - Configure custom Internet service applications. -- fortinet.fortimanager.fmgr_application_internetservicecustom_disableentry - Disable entries in the Internet service database. -- fortinet.fortimanager.fmgr_application_internetservicecustom_disableentry_iprange - IP ranges in the disable entry. -- fortinet.fortimanager.fmgr_application_internetservicecustom_entry - Entries added to the Internet service database and custom database. -- fortinet.fortimanager.fmgr_application_internetservicecustom_entry_portrange - Port ranges in the custom entry. -- fortinet.fortimanager.fmgr_casb_profile - Configure CASB profile. -- fortinet.fortimanager.fmgr_casb_profile_saasapplication - CASB profile SaaS application. -- fortinet.fortimanager.fmgr_casb_profile_saasapplication_accessrule - CASB profile access rule. -- fortinet.fortimanager.fmgr_casb_profile_saasapplication_customcontrol - CASB profile custom control. -- fortinet.fortimanager.fmgr_casb_profile_saasapplication_customcontrol_option - CASB custom control option. -- fortinet.fortimanager.fmgr_casb_saasapplication - Configure CASB SaaS application. -- fortinet.fortimanager.fmgr_casb_useractivity - Configure CASB user activity. -- fortinet.fortimanager.fmgr_casb_useractivity_controloptions - CASB control options. -- fortinet.fortimanager.fmgr_casb_useractivity_controloptions_operations - CASB control option operations. -- fortinet.fortimanager.fmgr_casb_useractivity_match - CASB user activity match rules. -- fortinet.fortimanager.fmgr_casb_useractivity_match_rules - CASB user activity rules. -- fortinet.fortimanager.fmgr_cloud_orchestaws - no description -- fortinet.fortimanager.fmgr_cloud_orchestawsconnector - no description -- fortinet.fortimanager.fmgr_cloud_orchestawstemplate_autoscaleexistingvpc - no description -- fortinet.fortimanager.fmgr_cloud_orchestawstemplate_autoscalenewvpc - no description -- fortinet.fortimanager.fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc - no description -- fortinet.fortimanager.fmgr_cloud_orchestration - no description -- fortinet.fortimanager.fmgr_devprof_log_syslogd_filter_excludelist - no description -- fortinet.fortimanager.fmgr_devprof_log_syslogd_filter_excludelist_fields - no description -- fortinet.fortimanager.fmgr_devprof_log_syslogd_filter_freestyle - Free style filters. -- fortinet.fortimanager.fmgr_devprof_log_syslogd_setting_customfieldname - Custom field name for CEF format logging. -- fortinet.fortimanager.fmgr_dnsfilter_profile_urlfilter - URL filter settings. -- fortinet.fortimanager.fmgr_dnsfilter_urlfilter - Configure URL filter list. -- fortinet.fortimanager.fmgr_dnsfilter_urlfilter_entries - DNS URL filter. -- fortinet.fortimanager.fmgr_dvmdb_upgrade - no description -- fortinet.fortimanager.fmgr_emailfilter_profile_yahoomail - Yahoo! Mail. -- fortinet.fortimanager.fmgr_extensioncontroller_dataplan - FortiExtender dataplan configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile - FortiExtender extender profile configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular - FortiExtender cellular configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_controllerreport - FortiExtender controller report configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_modem1 - Configuration options for modem 1. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_modem1_autoswitch - FortiExtender auto switch configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_modem2 - Configuration options for modem 2. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_modem2_autoswitch - FortiExtender auto switch configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_smsnotification - FortiExtender cellular SMS notification configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_smsnotification_alert - SMS alert list. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_cellular_smsnotification_receiver - SMS notification receiver list. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_lanextension - FortiExtender lan extension configuration. -- fortinet.fortimanager.fmgr_extensioncontroller_extenderprofile_lanextension_backhaul - LAN extension backhaul tunnel configuration. -- fortinet.fortimanager.fmgr_firewall_accessproxy6 - Configure IPv6 access proxy. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway - Set IPv4 API Gateway. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway6 - Set IPv6 API Gateway. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway6_quic - QUIC setting. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway6_realservers - Select the real servers that this Access Proxy will distribute traffic to. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway6_sslciphersuites - SSL/TLS cipher suites to offer to a server, ordered by priority. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway_quic - QUIC setting. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway_realservers - Select the real servers that this Access Proxy will distribute traffic to. -- fortinet.fortimanager.fmgr_firewall_accessproxy6_apigateway_sslciphersuites - SSL/TLS cipher suites to offer to a server, ordered by priority. -- fortinet.fortimanager.fmgr_firewall_accessproxy_apigateway6_quic - QUIC setting. -- fortinet.fortimanager.fmgr_firewall_accessproxy_apigateway_quic - QUIC setting. -- fortinet.fortimanager.fmgr_firewall_address6_profilelist - List of NSX service profiles that use this address. -- fortinet.fortimanager.fmgr_firewall_address_profilelist - List of NSX service profiles that use this address. -- fortinet.fortimanager.fmgr_firewall_casbprofile - no description -- fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication - no description -- fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication_accessrule - no description -- fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication_customcontrol - no description -- fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication_customcontrol_option - no description -- fortinet.fortimanager.fmgr_firewall_explicitproxyaddress - Explicit web proxy address configuration. -- fortinet.fortimanager.fmgr_firewall_explicitproxyaddress_headergroup - HTTP header group. -- fortinet.fortimanager.fmgr_firewall_explicitproxyaddrgrp - Explicit web proxy address group configuration. -- fortinet.fortimanager.fmgr_firewall_gtp_messagefilter - Message filter. -- fortinet.fortimanager.fmgr_firewall_ippoolgrp - Configure IPv4 pool groups. -- fortinet.fortimanager.fmgr_firewall_networkservicedynamic - Configure Dynamic Network Services. -- fortinet.fortimanager.fmgr_firewall_vendormac - Show vendor and the MAC address they have. -- fortinet.fortimanager.fmgr_firewall_vip_quic - QUIC setting. -- fortinet.fortimanager.fmgr_fmg_fabric_authorization_template - no description -- fortinet.fortimanager.fmgr_fmg_fabric_authorization_template_platforms - no description -- fortinet.fortimanager.fmgr_fmupdate_fwmsetting_upgradetimeout - Configure the timeout value of image upgrade process. -- fortinet.fortimanager.fmgr_fsp_vlan_dynamicmapping_interface_vrrp - VRRP configuration. -- fortinet.fortimanager.fmgr_fsp_vlan_dynamicmapping_interface_vrrp_proxyarp - VRRP Proxy ARP configuration. -- fortinet.fortimanager.fmgr_fsp_vlan_interface_vrrp_proxyarp - VRRP Proxy ARP configuration. -- fortinet.fortimanager.fmgr_ips_baseline_sensor - Configure IPS sensor. -- fortinet.fortimanager.fmgr_ips_baseline_sensor_entries - IPS sensor filter. -- fortinet.fortimanager.fmgr_ips_baseline_sensor_entries_exemptip - Traffic from selected source or destination IP addresses is exempt from this signature. -- fortinet.fortimanager.fmgr_ips_baseline_sensor_filter - no description -- fortinet.fortimanager.fmgr_ips_baseline_sensor_override - no description -- fortinet.fortimanager.fmgr_ips_baseline_sensor_override_exemptip - no description -- fortinet.fortimanager.fmgr_log_npuserver - Configure all the log servers and create the server groups. -- fortinet.fortimanager.fmgr_log_npuserver_servergroup - create server group. -- fortinet.fortimanager.fmgr_log_npuserver_serverinfo - configure server info. -- fortinet.fortimanager.fmgr_pkg_firewall_explicitproxypolicy - Configure Explicit proxy policies. -- fortinet.fortimanager.fmgr_pkg_firewall_explicitproxypolicy_identitybasedpolicy - Identity-based policy. -- fortinet.fortimanager.fmgr_pkg_firewall_explicitproxypolicy_sectionvalue - Configure Explicit proxy policies. -- fortinet.fortimanager.fmgr_pkg_firewall_hyperscalepolicy - Configure IPv4/IPv6 policies. -- fortinet.fortimanager.fmgr_pkg_firewall_hyperscalepolicy46 - Configure IPv4 to IPv6 policies. -- fortinet.fortimanager.fmgr_pkg_firewall_hyperscalepolicy6 - Configure IPv6 policies. -- fortinet.fortimanager.fmgr_pkg_firewall_hyperscalepolicy64 - Configure IPv6 to IPv4 policies. -- fortinet.fortimanager.fmgr_pkg_user_nacpolicy - Configure NAC policy matching pattern to identify matching NAC devices. -- fortinet.fortimanager.fmgr_pm_config_meta_reference - no description -- fortinet.fortimanager.fmgr_pm_config_pblock_firewall_consolidated_policy - Configure consolidated IPv4/IPv6 policies. -- fortinet.fortimanager.fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue - Configure consolidated IPv4/IPv6 policies. -- fortinet.fortimanager.fmgr_pm_config_pblock_firewall_policy6 - Configure IPv6 policies. -- fortinet.fortimanager.fmgr_pm_config_pblock_firewall_policy6_sectionvalue - Configure IPv6 policies. -- fortinet.fortimanager.fmgr_pm_devprof_scopemember - no description -- fortinet.fortimanager.fmgr_pm_pkg_scopemember - Policy package or folder. -- fortinet.fortimanager.fmgr_pm_wanprof_scopemember - no description -- fortinet.fortimanager.fmgr_securityconsole_install_objects_v2 - no description -- fortinet.fortimanager.fmgr_securityconsole_template_cli_preview - no description -- fortinet.fortimanager.fmgr_switchcontroller_acl_group - Configure ACL groups to be applied on managed FortiSwitch ports. -- fortinet.fortimanager.fmgr_switchcontroller_acl_ingress - Configure ingress ACL policies to be applied on managed FortiSwitch ports. -- fortinet.fortimanager.fmgr_switchcontroller_acl_ingress_action - ACL actions. -- fortinet.fortimanager.fmgr_switchcontroller_acl_ingress_classifier - ACL classifiers. -- fortinet.fortimanager.fmgr_switchcontroller_dynamicportpolicy - Configure Dynamic port policy to be applied on the managed FortiSwitch ports through DPP device. -- fortinet.fortimanager.fmgr_switchcontroller_dynamicportpolicy_policy - Port policies with matching criteria and actions. -- fortinet.fortimanager.fmgr_switchcontroller_fortilinksettings - Configure integrated FortiLink settings for FortiSwitch. -- fortinet.fortimanager.fmgr_switchcontroller_fortilinksettings_nacports - NAC specific configuration. -- fortinet.fortimanager.fmgr_switchcontroller_macpolicy - Configure MAC policy to be applied on the managed FortiSwitch devices through NAC device. -- fortinet.fortimanager.fmgr_switchcontroller_managedswitch_dhcpsnoopingstaticclient - Configure FortiSwitch DHCP snooping static clients. -- fortinet.fortimanager.fmgr_switchcontroller_managedswitch_ports_dhcpsnoopoption82override - Configure DHCP snooping option 82 override. -- fortinet.fortimanager.fmgr_switchcontroller_managedswitch_routeoffloadrouter - Configure route offload MCLAG IP address. -- fortinet.fortimanager.fmgr_switchcontroller_managedswitch_staticmac - Configuration method to edit FortiSwitch Static and Sticky MAC. -- fortinet.fortimanager.fmgr_switchcontroller_managedswitch_stpinstance - Configuration method to edit Spanning Tree Protocol -- fortinet.fortimanager.fmgr_switchcontroller_ptp_profile - Global PTP profile. -- fortinet.fortimanager.fmgr_switchcontroller_switchinterfacetag - Configure switch object tags. -- fortinet.fortimanager.fmgr_switchcontroller_trafficpolicy - Configure FortiSwitch traffic policy. -- fortinet.fortimanager.fmgr_switchcontroller_vlanpolicy - Configure VLAN policy to be applied on the managed FortiSwitch ports through dynamic-port-policy. -- fortinet.fortimanager.fmgr_sys_cloud_orchest - no description -- fortinet.fortimanager.fmgr_system_csf - Add this device to a Security Fabric or set up a new Security Fabric on this device. -- fortinet.fortimanager.fmgr_system_csf_fabricconnector - Fabric connector configuration. -- fortinet.fortimanager.fmgr_system_csf_trustedlist - Pre-authorized and blocked security fabric nodes. -- fortinet.fortimanager.fmgr_system_npu_backgroundssescan - Configure driver background scan for SSE. -- fortinet.fortimanager.fmgr_system_npu_dosoptions - NPU DoS configurations. -- fortinet.fortimanager.fmgr_system_npu_dswdtsprofile - Configure NPU DSW DTS profile. -- fortinet.fortimanager.fmgr_system_npu_dswqueuedtsprofile - Configure NPU DSW Queue DTS profile. -- fortinet.fortimanager.fmgr_system_npu_hpe - Host protection engine configuration. -- fortinet.fortimanager.fmgr_system_npu_ipreassembly - IP reassebmly engine configuration. -- fortinet.fortimanager.fmgr_system_npu_npqueues - Configure queue assignment on NP7. -- fortinet.fortimanager.fmgr_system_npu_npqueues_ethernettype - Configure a NP7 QoS Ethernet Type. -- fortinet.fortimanager.fmgr_system_npu_npqueues_ipprotocol - Configure a NP7 QoS IP Protocol. -- fortinet.fortimanager.fmgr_system_npu_npqueues_ipservice - Configure a NP7 QoS IP Service. -- fortinet.fortimanager.fmgr_system_npu_npqueues_profile - Configure a NP7 class profile. -- fortinet.fortimanager.fmgr_system_npu_npqueues_scheduler - Configure a NP7 QoS Scheduler. -- fortinet.fortimanager.fmgr_system_npu_portpathoption - Configure port using NPU or Intel-NIC. -- fortinet.fortimanager.fmgr_system_npu_ssehascan - Configure driver HA scan for SSE. -- fortinet.fortimanager.fmgr_system_npu_swtrhash - Configure switch traditional hashing. -- fortinet.fortimanager.fmgr_system_npu_tcptimeoutprofile - Configure TCP timeout profile. -- fortinet.fortimanager.fmgr_system_npu_udptimeoutprofile - Configure UDP timeout profile. -- fortinet.fortimanager.fmgr_system_objecttag - Configure object tags. -- fortinet.fortimanager.fmgr_system_sdnconnector_compartmentlist - Configure OCI compartment list. -- fortinet.fortimanager.fmgr_system_sdnconnector_ociregionlist - Configure OCI region list. -- fortinet.fortimanager.fmgr_system_sdnproxy - Configure SDN proxy. -- fortinet.fortimanager.fmgr_system_socfabric_trustedlist - Pre-authorized security fabric nodes -- fortinet.fortimanager.fmgr_um_image_upgrade - The older API for updating the firmware of specific device. -- fortinet.fortimanager.fmgr_um_image_upgrade_ext - Update the firmware of specific device. -- fortinet.fortimanager.fmgr_user_certificate - Configure certificate users. -- fortinet.fortimanager.fmgr_user_deviceaccesslist - Configure device access control lists. -- fortinet.fortimanager.fmgr_user_deviceaccesslist_devicelist - Device list. -- fortinet.fortimanager.fmgr_user_flexvm - no description -- fortinet.fortimanager.fmgr_user_json - no description -- fortinet.fortimanager.fmgr_user_saml_dynamicmapping - SAML server entry configuration. -- fortinet.fortimanager.fmgr_virtualpatch_profile - Configure virtual-patch profile. -- fortinet.fortimanager.fmgr_virtualpatch_profile_exemption - Exempt devices or rules. -- fortinet.fortimanager.fmgr_vpnsslweb_portal_landingpage - Landing page options. -- fortinet.fortimanager.fmgr_vpnsslweb_portal_landingpage_formdata - Form data. -- fortinet.fortimanager.fmgr_vpnsslweb_virtualdesktopapplist - SSL-VPN virtual desktop application list. -- fortinet.fortimanager.fmgr_vpnsslweb_virtualdesktopapplist_apps - Applications. -- fortinet.fortimanager.fmgr_wireless_accesscontrollist - Configure WiFi bridge access control list. -- fortinet.fortimanager.fmgr_wireless_accesscontrollist_layer3ipv4rules - AP ACL layer3 ipv4 rule list. -- fortinet.fortimanager.fmgr_wireless_accesscontrollist_layer3ipv6rules - AP ACL layer3 ipv6 rule list. -- fortinet.fortimanager.fmgr_wireless_address - Configure the client with its MAC address. -- fortinet.fortimanager.fmgr_wireless_addrgrp - Configure the MAC address group. -- fortinet.fortimanager.fmgr_wireless_ssidpolicy - Configure WiFi SSID policies. -- fortinet.fortimanager.fmgr_wireless_syslogprofile - Configure Wireless Termination Points - -inspur.ispim -~~~~~~~~~~~~ - -- inspur.ispim.hba_info - Get CPU information -- inspur.ispim.update_psu - Update PSU - -netapp.ontap -~~~~~~~~~~~~ - -- netapp.ontap.na_ontap_active_directory_domain_controllers - NetApp ONTAP configure active directory preferred domain controllers -- netapp.ontap.na_ontap_ems_config - NetApp ONTAP module to modify EMS configuration. - -netbox.netbox -~~~~~~~~~~~~~ - -- netbox.netbox.netbox_config_template - Creates, updates, or removed a config template from NetBox - -ngine_io.exoscale -~~~~~~~~~~~~~~~~~ - -- ngine_io.exoscale.instance_rdns_record - Manages reverse DNS records for Exoscale compute instances. - -purestorage.flasharray -~~~~~~~~~~~~~~~~~~~~~~ - -- purestorage.flasharray.purefa_file - Manage FlashArray File Copies -- purestorage.flasharray.purefa_logging - Manage Pure Storage FlashArray Audit and Session logs - -sensu.sensu_go -~~~~~~~~~~~~~~ - -- sensu.sensu_go.pipeline - Manage Sensu pipelines. -- sensu.sensu_go.pipeline_info - List Sensu pipelines. - -t_systems_mms.icinga_director -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- t_systems_mms.icinga_director.icinga_deploy - Trigger deployment in Icinga2 -- t_systems_mms.icinga_director.icinga_deploy_info - Get deployment information through the director API - -theforeman.foreman -~~~~~~~~~~~~~~~~~~ - -- theforeman.foreman.smart_class_parameter_override_value - Manage Smart Class Parameter Override Values -- theforeman.foreman.wait_for_task - Wait for a task - -vultr.cloud -~~~~~~~~~~~ - -- vultr.cloud.bare_metal - Manages bare metal machines on Vultr. -- vultr.cloud.vpc2 - Manages VPCs 2.0 on Vultr -- vultr.cloud.vpc2_info - Gather information about the Vultr VPCs 2.0 - -New Roles ---------- - -- dellemc.openmanage.idrac_attributes - Role to configure iDRAC attributes. -- dellemc.openmanage.idrac_bios - Role to modify BIOS attributes, clear pending BIOS attributes, and reset the BIOS to default settings. -- dellemc.openmanage.idrac_boot - Configure the boot order settings -- dellemc.openmanage.idrac_job_queue - Role to manage the iDRAC lifecycle controller job queue. -- dellemc.openmanage.idrac_reset - Role to reset and restart iDRAC (iDRAC8 and iDRAC9 only) for Dell PowerEdge servers. -- dellemc.openmanage.idrac_storage_controller - Role to configure the physical disk, virtual disk, and storage controller settings on iDRAC9 based PowerEdge servers. - -Unchanged Collections ---------------------- - -- ansible.posix (still version 1.5.4) -- community.azure (still version 2.0.0) -- community.okd (still version 2.3.0) -- community.proxysql (still version 1.5.1) -- community.rabbitmq (still version 1.2.3) -- community.sap_libs (still version 1.4.1) -- frr.frr (still version 2.0.2) -- gluster.gluster (still version 1.0.2) -- hpe.nimble (still version 1.1.4) -- ibm.qradar (still version 2.1.0) -- infinidat.infinibox (still version 1.3.12) -- infoblox.nios_modules (still version 1.5.0) -- inspur.sm (still version 2.3.0) -- kubernetes.core (still version 2.4.0) -- netapp.elementsw (still version 21.7.0) -- netapp.storagegrid (still version 21.11.1) -- netapp_eseries.santricity (still version 1.4.0) -- ngine_io.cloudstack (still version 2.3.0) -- openstack.cloud (still version 2.1.0) -- openvswitch.openvswitch (still version 2.1.1) -- splunk.es (still version 2.1.0) -- vmware.vmware_rest (still version 2.3.1) diff --git a/MANIFEST.in b/MANIFEST.in index 63753c849..c945bf6c2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,9 +1,9 @@ include COPYING include README.rst include build-ansible.sh -include CHANGELOG-v9.rst -include CHANGELOG-v9.md -include porting_guide_9.rst +include CHANGELOG-v10.rst +include CHANGELOG-v10.md +include porting_guide_10.rst include debian/* include tags.yaml recursive-include ansible_collections/ ** diff --git a/PKG-INFO b/PKG-INFO index 7397f21b8..d6c0324fd 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ansible -Version: 9.5.1 +Version: 10.0.0 Summary: Radically simple IT automation Home-page: https://ansible.com/ Author: Ansible, Inc. @@ -28,7 +28,7 @@ Classifier: Programming Language :: Python :: 3 :: Only Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: COPYING -Requires-Dist: ansible-core~=2.16.6 +Requires-Dist: ansible-core~=2.17.0 .. GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) diff --git a/ansible.egg-info/PKG-INFO b/ansible.egg-info/PKG-INFO index 7397f21b8..d6c0324fd 100644 --- a/ansible.egg-info/PKG-INFO +++ b/ansible.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ansible -Version: 9.5.1 +Version: 10.0.0 Summary: Radically simple IT automation Home-page: https://ansible.com/ Author: Ansible, Inc. @@ -28,7 +28,7 @@ Classifier: Programming Language :: Python :: 3 :: Only Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: COPYING -Requires-Dist: ansible-core~=2.16.6 +Requires-Dist: ansible-core~=2.17.0 .. GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) diff --git a/ansible.egg-info/SOURCES.txt b/ansible.egg-info/SOURCES.txt index 526c6786b..d6754d70d 100644 --- a/ansible.egg-info/SOURCES.txt +++ b/ansible.egg-info/SOURCES.txt @@ -1,10 +1,10 @@ -CHANGELOG-v9.md -CHANGELOG-v9.rst +CHANGELOG-v10.md +CHANGELOG-v10.rst COPYING MANIFEST.in README.rst build-ansible.sh -porting_guide_9.rst +porting_guide_10.rst pyproject.toml setup.cfg setup.py @@ -164,14 +164,17 @@ tags.yaml ./ansible_collections/amazon/aws/plugins/modules/lambda_policy.py ./ansible_collections/amazon/aws/plugins/modules/rds_cluster.py ./ansible_collections/amazon/aws/plugins/modules/rds_cluster_info.py +./ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group.py +./ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group_info.py ./ansible_collections/amazon/aws/plugins/modules/rds_cluster_snapshot.py +./ansible_collections/amazon/aws/plugins/modules/rds_engine_versions_info.py ./ansible_collections/amazon/aws/plugins/modules/rds_global_cluster_info.py ./ansible_collections/amazon/aws/plugins/modules/rds_instance.py ./ansible_collections/amazon/aws/plugins/modules/rds_instance_info.py +./ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py ./ansible_collections/amazon/aws/plugins/modules/rds_instance_snapshot.py ./ansible_collections/amazon/aws/plugins/modules/rds_option_group.py ./ansible_collections/amazon/aws/plugins/modules/rds_option_group_info.py -./ansible_collections/amazon/aws/plugins/modules/rds_param_group.py ./ansible_collections/amazon/aws/plugins/modules/rds_snapshot_info.py ./ansible_collections/amazon/aws/plugins/modules/rds_subnet_group.py ./ansible_collections/amazon/aws/plugins/modules/route53.py @@ -198,7 +201,7 @@ tags.yaml ./ansible_collections/ansible/netcommon/pyproject.toml ./ansible_collections/ansible/netcommon/requirements.txt ./ansible_collections/ansible/netcommon/test-requirements.txt -./ansible_collections/ansible/netcommon/tox.ini +./ansible_collections/ansible/netcommon/tox-ansible.ini ./ansible_collections/ansible/netcommon/LICENSES/BSD-2-Clause.txt ./ansible_collections/ansible/netcommon/LICENSES/GPL-3.0-or-later.txt ./ansible_collections/ansible/netcommon/LICENSES/PSF-2.0.txt @@ -258,6 +261,7 @@ tags.yaml ./ansible_collections/ansible/netcommon/plugins/modules/cli_backup.py ./ansible_collections/ansible/netcommon/plugins/modules/cli_command.py ./ansible_collections/ansible/netcommon/plugins/modules/cli_config.py +./ansible_collections/ansible/netcommon/plugins/modules/cli_restore.py ./ansible_collections/ansible/netcommon/plugins/modules/grpc_config.py ./ansible_collections/ansible/netcommon/plugins/modules/grpc_get.py ./ansible_collections/ansible/netcommon/plugins/modules/net_get.py @@ -351,12 +355,10 @@ tags.yaml ./ansible_collections/ansible/utils/bindep.txt ./ansible_collections/ansible/utils/codecov.yml ./ansible_collections/ansible/utils/cspell.config.yaml -./ansible_collections/ansible/utils/mypy.ini ./ansible_collections/ansible/utils/pyproject.toml ./ansible_collections/ansible/utils/requirements.txt ./ansible_collections/ansible/utils/test-requirements.txt ./ansible_collections/ansible/utils/tox-ansible.ini -./ansible_collections/ansible/utils/tox.ini ./ansible_collections/ansible/utils/changelogs/changelog.yaml ./ansible_collections/ansible/utils/changelogs/config.yaml ./ansible_collections/ansible/utils/changelogs/fragments/.keep @@ -575,11 +577,10 @@ tags.yaml ./ansible_collections/arista/eos/MANIFEST.json ./ansible_collections/arista/eos/README.md ./ansible_collections/arista/eos/bindep.txt -./ansible_collections/arista/eos/ignore-2.9.txt ./ansible_collections/arista/eos/pyproject.toml ./ansible_collections/arista/eos/requirements.txt ./ansible_collections/arista/eos/test-requirements.txt -./ansible_collections/arista/eos/tox.ini +./ansible_collections/arista/eos/tox-ansible.ini ./ansible_collections/arista/eos/changelogs/changelog.yaml ./ansible_collections/arista/eos/changelogs/config.yaml ./ansible_collections/arista/eos/changelogs/fragments/.keep @@ -808,7 +809,6 @@ tags.yaml ./ansible_collections/arista/eos/plugins/modules/eos_acl_interfaces.py ./ansible_collections/arista/eos/plugins/modules/eos_acls.py ./ansible_collections/arista/eos/plugins/modules/eos_banner.py -./ansible_collections/arista/eos/plugins/modules/eos_bgp.py ./ansible_collections/arista/eos/plugins/modules/eos_bgp_address_family.py ./ansible_collections/arista/eos/plugins/modules/eos_bgp_global.py ./ansible_collections/arista/eos/plugins/modules/eos_command.py @@ -825,7 +825,6 @@ tags.yaml ./ansible_collections/arista/eos/plugins/modules/eos_lldp.py ./ansible_collections/arista/eos/plugins/modules/eos_lldp_global.py ./ansible_collections/arista/eos/plugins/modules/eos_lldp_interfaces.py -./ansible_collections/arista/eos/plugins/modules/eos_logging.py ./ansible_collections/arista/eos/plugins/modules/eos_logging_global.py ./ansible_collections/arista/eos/plugins/modules/eos_ntp_global.py ./ansible_collections/arista/eos/plugins/modules/eos_ospf_interfaces.py @@ -893,6 +892,9 @@ tags.yaml ./ansible_collections/awx/awx/plugins/modules/project.py ./ansible_collections/awx/awx/plugins/modules/project_update.py ./ansible_collections/awx/awx/plugins/modules/role.py +./ansible_collections/awx/awx/plugins/modules/role_definition.py +./ansible_collections/awx/awx/plugins/modules/role_team_assignment.py +./ansible_collections/awx/awx/plugins/modules/role_user_assignment.py ./ansible_collections/awx/awx/plugins/modules/schedule.py ./ansible_collections/awx/awx/plugins/modules/settings.py ./ansible_collections/awx/awx/plugins/modules/subscriptions.py @@ -926,6 +928,9 @@ tags.yaml ./ansible_collections/awx/awx/test/awx/test_organization.py ./ansible_collections/awx/awx/test/awx/test_project.py ./ansible_collections/awx/awx/test/awx/test_role.py +./ansible_collections/awx/awx/test/awx/test_role_definition.py +./ansible_collections/awx/awx/test/awx/test_role_team_assignment.py +./ansible_collections/awx/awx/test/awx/test_role_user_assignment.py ./ansible_collections/awx/awx/test/awx/test_schedule.py ./ansible_collections/awx/awx/test/awx/test_settings.py ./ansible_collections/awx/awx/test/awx/test_team.py @@ -953,9 +958,11 @@ tags.yaml ./ansible_collections/azure/azcollection/plugins/doc_fragments/azure_tags.py ./ansible_collections/azure/azcollection/plugins/inventory/azure_rm.py ./ansible_collections/azure/azcollection/plugins/lookup/azure_keyvault_secret.py +./ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py ./ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py ./ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_ext.py ./ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_rest.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_accesstoken_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_account_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication_info.py @@ -972,6 +979,7 @@ tags.yaml ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksagentpool.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksagentpool_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksagentpoolversion_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_akscredentials_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksupgrade_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksversion_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement.py @@ -1124,12 +1132,20 @@ tags.yaml ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_notificationhub_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlconfiguration.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlconfiguration_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqldatabase.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqldatabase_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlfirewallrule.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlfirewallrule_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlserver.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlserver_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_privatednsrecordset.py @@ -1150,6 +1166,8 @@ tags.yaml ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_proximityplacementgroup_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipaddress.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipaddress_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache.py @@ -1190,6 +1208,8 @@ tags.yaml ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlserver.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlserver_info.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey.py +./ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount_info.py ./ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageblob.py @@ -1843,7 +1863,12 @@ tags.yaml ./ansible_collections/cisco/asa/changelogs/fragments/.keep ./ansible_collections/cisco/asa/meta/runtime.yml ./ansible_collections/cisco/asa/plugins/action/__init__.py +./ansible_collections/cisco/asa/plugins/action/acls.py ./ansible_collections/cisco/asa/plugins/action/asa.py +./ansible_collections/cisco/asa/plugins/action/command.py +./ansible_collections/cisco/asa/plugins/action/config.py +./ansible_collections/cisco/asa/plugins/action/facts.py +./ansible_collections/cisco/asa/plugins/action/ogs.py ./ansible_collections/cisco/asa/plugins/cliconf/__init__.py ./ansible_collections/cisco/asa/plugins/cliconf/asa.py ./ansible_collections/cisco/asa/plugins/doc_fragments/__init__.py @@ -2756,6 +2781,7 @@ tags.yaml ./ansible_collections/cisco/intersight/misc/README.md ./ansible_collections/cisco/intersight/playbooks/claim_device.yml ./ansible_collections/cisco/intersight/playbooks/cos_server_policies_and_profiles.yml +./ansible_collections/cisco/intersight/playbooks/count_vms.yml ./ansible_collections/cisco/intersight/playbooks/deploy_server_profiles.yml ./ansible_collections/cisco/intersight/playbooks/derive_profiles.yml ./ansible_collections/cisco/intersight/playbooks/devnet_inventory @@ -2840,10 +2866,11 @@ tags.yaml ./ansible_collections/cisco/ios/codecov.yml ./ansible_collections/cisco/ios/cspell.config.yaml ./ansible_collections/cisco/ios/mypy.ini +./ansible_collections/cisco/ios/platform_guide.rst ./ansible_collections/cisco/ios/pyproject.toml ./ansible_collections/cisco/ios/requirements.txt ./ansible_collections/cisco/ios/test-requirements.txt -./ansible_collections/cisco/ios/tox.ini +./ansible_collections/cisco/ios/tox-ansible.ini ./ansible_collections/cisco/ios/changelogs/changelog.yaml ./ansible_collections/cisco/ios/changelogs/config.yaml ./ansible_collections/cisco/ios/changelogs/fragments/.keep @@ -2873,7 +2900,6 @@ tags.yaml ./ansible_collections/cisco/ios/plugins/action/lldp_interfaces.py ./ansible_collections/cisco/ios/plugins/action/logging.py ./ansible_collections/cisco/ios/plugins/action/logging_global.py -./ansible_collections/cisco/ios/plugins/action/ntp.py ./ansible_collections/cisco/ios/plugins/action/ntp_global.py ./ansible_collections/cisco/ios/plugins/action/ospf_interfaces.py ./ansible_collections/cisco/ios/plugins/action/ospfv2.py @@ -3075,15 +3101,7 @@ tags.yaml ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vxlan_vtep/__init__.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vxlan_vtep/vxlan_vtep.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/__init__.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/providers.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py -./ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/__init__.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acl_interfaces.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py @@ -3107,6 +3125,7 @@ tags.yaml ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/service.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/static_routes.py +./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vxlan_vtep.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/__init__.py ./ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py @@ -3114,7 +3133,6 @@ tags.yaml ./ansible_collections/cisco/ios/plugins/modules/ios_acl_interfaces.py ./ansible_collections/cisco/ios/plugins/modules/ios_acls.py ./ansible_collections/cisco/ios/plugins/modules/ios_banner.py -./ansible_collections/cisco/ios/plugins/modules/ios_bgp.py ./ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py ./ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py ./ansible_collections/cisco/ios/plugins/modules/ios_command.py @@ -3134,7 +3152,6 @@ tags.yaml ./ansible_collections/cisco/ios/plugins/modules/ios_lldp_global.py ./ansible_collections/cisco/ios/plugins/modules/ios_lldp_interfaces.py ./ansible_collections/cisco/ios/plugins/modules/ios_logging_global.py -./ansible_collections/cisco/ios/plugins/modules/ios_ntp.py ./ansible_collections/cisco/ios/plugins/modules/ios_ntp_global.py ./ansible_collections/cisco/ios/plugins/modules/ios_ospf_interfaces.py ./ansible_collections/cisco/ios/plugins/modules/ios_ospfv2.py @@ -3160,10 +3177,11 @@ tags.yaml ./ansible_collections/cisco/iosxr/README.md ./ansible_collections/cisco/iosxr/bindep.txt ./ansible_collections/cisco/iosxr/codecov.yml +./ansible_collections/cisco/iosxr/platform_guide.rst ./ansible_collections/cisco/iosxr/pyproject.toml ./ansible_collections/cisco/iosxr/requirements.txt ./ansible_collections/cisco/iosxr/test-requirements.txt -./ansible_collections/cisco/iosxr/tox.ini +./ansible_collections/cisco/iosxr/tox-ansible.ini ./ansible_collections/cisco/iosxr/changelogs/changelog.yaml ./ansible_collections/cisco/iosxr/changelogs/config.yaml ./ansible_collections/cisco/iosxr/changelogs/fragments/.keep @@ -3403,7 +3421,6 @@ tags.yaml ./ansible_collections/cisco/iosxr/plugins/modules/iosxr_lag_interfaces.py ./ansible_collections/cisco/iosxr/plugins/modules/iosxr_lldp_global.py ./ansible_collections/cisco/iosxr/plugins/modules/iosxr_lldp_interfaces.py -./ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging.py ./ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging_global.py ./ansible_collections/cisco/iosxr/plugins/modules/iosxr_netconf.py ./ansible_collections/cisco/iosxr/plugins/modules/iosxr_ntp_global.py @@ -3430,7 +3447,6 @@ tags.yaml ./ansible_collections/cisco/ise/LICENSE ./ansible_collections/cisco/ise/MANIFEST.json ./ansible_collections/cisco/ise/Makefile -./ansible_collections/cisco/ise/Pipfile ./ansible_collections/cisco/ise/README.md ./ansible_collections/cisco/ise/requirements.txt ./ansible_collections/cisco/ise/changelogs/changelog.yaml @@ -3495,10 +3511,12 @@ tags.yaml ./ansible_collections/cisco/ise/playbooks/trustsec_vn_vlan_mapping.yml ./ansible_collections/cisco/ise/playbooks/group_vars/ise_servers ./ansible_collections/cisco/ise/playbooks/vars/device_administration_time_date_conditions.yml +./ansible_collections/cisco/ise/plugins/.DS_Store ./ansible_collections/cisco/ise/plugins/action/aci_bindings_info.py ./ansible_collections/cisco/ise/plugins/action/aci_settings.py ./ansible_collections/cisco/ise/plugins/action/aci_settings_info.py ./ansible_collections/cisco/ise/plugins/action/aci_test_connectivity.py +./ansible_collections/cisco/ise/plugins/action/active_directories_info.py ./ansible_collections/cisco/ise/plugins/action/active_directory.py ./ansible_collections/cisco/ise/plugins/action/active_directory_add_groups.py ./ansible_collections/cisco/ise/plugins/action/active_directory_groups_by_domain_info.py @@ -3510,6 +3528,7 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain_with_all_nodes.py ./ansible_collections/cisco/ise/plugins/action/active_directory_trusted_domains_info.py ./ansible_collections/cisco/ise/plugins/action/active_directory_user_groups_info.py +./ansible_collections/cisco/ise/plugins/action/ad_groups_info.py ./ansible_collections/cisco/ise/plugins/action/admin_user_info.py ./ansible_collections/cisco/ise/plugins/action/allowed_protocols.py ./ansible_collections/cisco/ise/plugins/action/allowed_protocols_info.py @@ -3538,13 +3557,14 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/certificate_template_info.py ./ansible_collections/cisco/ise/plugins/action/configuration.py ./ansible_collections/cisco/ise/plugins/action/configuration_info.py -./ansible_collections/cisco/ise/plugins/action/connector_config.py -./ansible_collections/cisco/ise/plugins/action/connector_config_info.py ./ansible_collections/cisco/ise/plugins/action/csr_delete.py ./ansible_collections/cisco/ise/plugins/action/csr_export_info.py ./ansible_collections/cisco/ise/plugins/action/csr_generate.py ./ansible_collections/cisco/ise/plugins/action/csr_generate_intermediate_ca.py ./ansible_collections/cisco/ise/plugins/action/csr_info.py +./ansible_collections/cisco/ise/plugins/action/custom_attributes.py +./ansible_collections/cisco/ise/plugins/action/custom_attributes_info.py +./ansible_collections/cisco/ise/plugins/action/custom_attributes_rename.py ./ansible_collections/cisco/ise/plugins/action/dataconnect_info.py ./ansible_collections/cisco/ise/plugins/action/dataconnect_settings_info.py ./ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password.py @@ -3582,9 +3602,16 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/device_administration_service_names_info.py ./ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions.py ./ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions_info.py -./ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py ./ansible_collections/cisco/ise/plugins/action/downloadable_acl.py ./ansible_collections/cisco/ise/plugins/action/downloadable_acl_info.py +./ansible_collections/cisco/ise/plugins/action/duo_identity_sync.py +./ansible_collections/cisco/ise/plugins/action/duo_identity_sync_cancel_info.py +./ansible_collections/cisco/ise/plugins/action/duo_identity_sync_info.py +./ansible_collections/cisco/ise/plugins/action/duo_identity_sync_status.py +./ansible_collections/cisco/ise/plugins/action/duo_identitysync_sync_info.py +./ansible_collections/cisco/ise/plugins/action/duo_mfa.py +./ansible_collections/cisco/ise/plugins/action/duo_mfa_info.py +./ansible_collections/cisco/ise/plugins/action/duo_mfa_testconnection.py ./ansible_collections/cisco/ise/plugins/action/egress_matrix_cell.py ./ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_monitor_status_info.py ./ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_request.py @@ -3603,6 +3630,12 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/endpoint_info.py ./ansible_collections/cisco/ise/plugins/action/endpoint_register.py ./ansible_collections/cisco/ise/plugins/action/endpoint_release_rejected_endpoint.py +./ansible_collections/cisco/ise/plugins/action/endpoints.py +./ansible_collections/cisco/ise/plugins/action/endpoints_bulk.py +./ansible_collections/cisco/ise/plugins/action/endpoints_bulk_info.py +./ansible_collections/cisco/ise/plugins/action/endpoints_device_type_info.py +./ansible_collections/cisco/ise/plugins/action/endpoints_info.py +./ansible_collections/cisco/ise/plugins/action/endpoints_task.py ./ansible_collections/cisco/ise/plugins/action/external_radius_server.py ./ansible_collections/cisco/ise/plugins/action/external_radius_server_info.py ./ansible_collections/cisco/ise/plugins/action/filter_policy.py @@ -3639,6 +3672,16 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/identity_group_info.py ./ansible_collections/cisco/ise/plugins/action/internal_user.py ./ansible_collections/cisco/ise/plugins/action/internal_user_info.py +./ansible_collections/cisco/ise/plugins/action/ipsec.py +./ansible_collections/cisco/ise/plugins/action/ipsec_bulk.py +./ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py +./ansible_collections/cisco/ise/plugins/action/ipsec_delete.py +./ansible_collections/cisco/ise/plugins/action/ipsec_delete_info.py +./ansible_collections/cisco/ise/plugins/action/ipsec_disable.py +./ansible_collections/cisco/ise/plugins/action/ipsec_disable_info.py +./ansible_collections/cisco/ise/plugins/action/ipsec_enable.py +./ansible_collections/cisco/ise/plugins/action/ipsec_enable_info.py +./ansible_collections/cisco/ise/plugins/action/ipsec_info.py ./ansible_collections/cisco/ise/plugins/action/ise_root_ca_regenerate.py ./ansible_collections/cisco/ise/plugins/action/licensing_connection_type_info.py ./ansible_collections/cisco/ise/plugins/action/licensing_eval_license_info.py @@ -3751,6 +3794,12 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/profiler_profile_info.py ./ansible_collections/cisco/ise/plugins/action/proxy_connection_settings.py ./ansible_collections/cisco/ise/plugins/action/proxy_connection_settings_info.py +./ansible_collections/cisco/ise/plugins/action/px_grid_direct.py +./ansible_collections/cisco/ise/plugins/action/px_grid_direct_dictionary_info.py +./ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py +./ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync.py +./ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync_info.py +./ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py ./ansible_collections/cisco/ise/plugins/action/px_grid_node_approve.py ./ansible_collections/cisco/ise/plugins/action/px_grid_node_delete.py ./ansible_collections/cisco/ise/plugins/action/px_grid_node_info.py @@ -3792,6 +3841,8 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/repository.py ./ansible_collections/cisco/ise/plugins/action/repository_files_info.py ./ansible_collections/cisco/ise/plugins/action/repository_info.py +./ansible_collections/cisco/ise/plugins/action/reservation.py +./ansible_collections/cisco/ise/plugins/action/reservation_info.py ./ansible_collections/cisco/ise/plugins/action/resource_version_info.py ./ansible_collections/cisco/ise/plugins/action/rest_id_store.py ./ansible_collections/cisco/ise/plugins/action/rest_id_store_info.py @@ -3833,6 +3884,8 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/sponsor_portal_info.py ./ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal.py ./ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal_info.py +./ansible_collections/cisco/ise/plugins/action/stop_replication.py +./ansible_collections/cisco/ise/plugins/action/stop_replication_info.py ./ansible_collections/cisco/ise/plugins/action/subscriber.py ./ansible_collections/cisco/ise/plugins/action/subscriber_bulk.py ./ansible_collections/cisco/ise/plugins/action/subscriber_imsi_info.py @@ -3868,7 +3921,6 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence_info.py ./ansible_collections/cisco/ise/plugins/action/tasks_info.py ./ansible_collections/cisco/ise/plugins/action/telemetry_info.py -./ansible_collections/cisco/ise/plugins/action/test_connector.py ./ansible_collections/cisco/ise/plugins/action/threat_vulnerabilities_clear.py ./ansible_collections/cisco/ise/plugins/action/transport_gateway_settings.py ./ansible_collections/cisco/ise/plugins/action/transport_gateway_settings_info.py @@ -3876,6 +3928,35 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/action/trusted_certificate_export_info.py ./ansible_collections/cisco/ise/plugins/action/trusted_certificate_import.py ./ansible_collections/cisco/ise/plugins/action/trusted_certificate_info.py +./ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app.py +./ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app_info.py +./ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping.py +./ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_create.py +./ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_delete.py +./ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_update.py +./ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_info.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_create.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_delete.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_update.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_info.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_create.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_update.py +./ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_info.py +./ansible_collections/cisco/ise/plugins/action/upgrade_proceed.py +./ansible_collections/cisco/ise/plugins/action/upgrade_proceed_info.py +./ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel.py +./ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel_info.py +./ansible_collections/cisco/ise/plugins/action/upgrade_stage_start.py +./ansible_collections/cisco/ise/plugins/action/upgrade_stage_start_info.py +./ansible_collections/cisco/ise/plugins/action/user_equipment.py +./ansible_collections/cisco/ise/plugins/action/user_equipment_bulk.py +./ansible_collections/cisco/ise/plugins/action/user_equipment_csv.py +./ansible_collections/cisco/ise/plugins/action/user_equipment_imei_info.py +./ansible_collections/cisco/ise/plugins/action/user_equipment_info.py +./ansible_collections/cisco/ise/plugins/action/user_equipment_subscriber_info.py ./ansible_collections/cisco/ise/plugins/doc_fragments/__init__.py ./ansible_collections/cisco/ise/plugins/doc_fragments/module.py ./ansible_collections/cisco/ise/plugins/doc_fragments/module_info.py @@ -3884,6 +3965,7 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/aci_settings.py ./ansible_collections/cisco/ise/plugins/modules/aci_settings_info.py ./ansible_collections/cisco/ise/plugins/modules/aci_test_connectivity.py +./ansible_collections/cisco/ise/plugins/modules/active_directories_info.py ./ansible_collections/cisco/ise/plugins/modules/active_directory.py ./ansible_collections/cisco/ise/plugins/modules/active_directory_add_groups.py ./ansible_collections/cisco/ise/plugins/modules/active_directory_groups_by_domain_info.py @@ -3895,6 +3977,7 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain_with_all_nodes.py ./ansible_collections/cisco/ise/plugins/modules/active_directory_trusted_domains_info.py ./ansible_collections/cisco/ise/plugins/modules/active_directory_user_groups_info.py +./ansible_collections/cisco/ise/plugins/modules/ad_groups_info.py ./ansible_collections/cisco/ise/plugins/modules/admin_user_info.py ./ansible_collections/cisco/ise/plugins/modules/allowed_protocols.py ./ansible_collections/cisco/ise/plugins/modules/allowed_protocols_info.py @@ -3923,13 +4006,14 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/certificate_template_info.py ./ansible_collections/cisco/ise/plugins/modules/configuration.py ./ansible_collections/cisco/ise/plugins/modules/configuration_info.py -./ansible_collections/cisco/ise/plugins/modules/connector_config.py -./ansible_collections/cisco/ise/plugins/modules/connector_config_info.py ./ansible_collections/cisco/ise/plugins/modules/csr_delete.py ./ansible_collections/cisco/ise/plugins/modules/csr_export_info.py ./ansible_collections/cisco/ise/plugins/modules/csr_generate.py ./ansible_collections/cisco/ise/plugins/modules/csr_generate_intermediate_ca.py ./ansible_collections/cisco/ise/plugins/modules/csr_info.py +./ansible_collections/cisco/ise/plugins/modules/custom_attributes.py +./ansible_collections/cisco/ise/plugins/modules/custom_attributes_info.py +./ansible_collections/cisco/ise/plugins/modules/custom_attributes_rename.py ./ansible_collections/cisco/ise/plugins/modules/dataconnect_info.py ./ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_info.py ./ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password.py @@ -3967,9 +4051,16 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/device_administration_service_names_info.py ./ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions.py ./ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions_info.py -./ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py ./ansible_collections/cisco/ise/plugins/modules/downloadable_acl.py ./ansible_collections/cisco/ise/plugins/modules/downloadable_acl_info.py +./ansible_collections/cisco/ise/plugins/modules/duo_identity_sync.py +./ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_cancel_info.py +./ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_info.py +./ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_status.py +./ansible_collections/cisco/ise/plugins/modules/duo_identitysync_sync_info.py +./ansible_collections/cisco/ise/plugins/modules/duo_mfa.py +./ansible_collections/cisco/ise/plugins/modules/duo_mfa_info.py +./ansible_collections/cisco/ise/plugins/modules/duo_mfa_testconnection.py ./ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell.py ./ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py ./ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_request.py @@ -3988,6 +4079,12 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/endpoint_info.py ./ansible_collections/cisco/ise/plugins/modules/endpoint_register.py ./ansible_collections/cisco/ise/plugins/modules/endpoint_release_rejected_endpoint.py +./ansible_collections/cisco/ise/plugins/modules/endpoints.py +./ansible_collections/cisco/ise/plugins/modules/endpoints_bulk.py +./ansible_collections/cisco/ise/plugins/modules/endpoints_bulk_info.py +./ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py +./ansible_collections/cisco/ise/plugins/modules/endpoints_info.py +./ansible_collections/cisco/ise/plugins/modules/endpoints_task.py ./ansible_collections/cisco/ise/plugins/modules/external_radius_server.py ./ansible_collections/cisco/ise/plugins/modules/external_radius_server_info.py ./ansible_collections/cisco/ise/plugins/modules/filter_policy.py @@ -4024,6 +4121,16 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/identity_group_info.py ./ansible_collections/cisco/ise/plugins/modules/internal_user.py ./ansible_collections/cisco/ise/plugins/modules/internal_user_info.py +./ansible_collections/cisco/ise/plugins/modules/ipsec.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_bulk.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_certificates_info.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_delete.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_delete_info.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_disable.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_disable_info.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_enable.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_enable_info.py +./ansible_collections/cisco/ise/plugins/modules/ipsec_info.py ./ansible_collections/cisco/ise/plugins/modules/ise_root_ca_regenerate.py ./ansible_collections/cisco/ise/plugins/modules/licensing_connection_type_info.py ./ansible_collections/cisco/ise/plugins/modules/licensing_eval_license_info.py @@ -4136,6 +4243,12 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/profiler_profile_info.py ./ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings.py ./ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings_info.py +./ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py +./ansible_collections/cisco/ise/plugins/modules/px_grid_direct_dictionary_info.py +./ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py +./ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync.py +./ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync_info.py +./ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py ./ansible_collections/cisco/ise/plugins/modules/px_grid_node_approve.py ./ansible_collections/cisco/ise/plugins/modules/px_grid_node_delete.py ./ansible_collections/cisco/ise/plugins/modules/px_grid_node_info.py @@ -4177,6 +4290,8 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/repository.py ./ansible_collections/cisco/ise/plugins/modules/repository_files_info.py ./ansible_collections/cisco/ise/plugins/modules/repository_info.py +./ansible_collections/cisco/ise/plugins/modules/reservation.py +./ansible_collections/cisco/ise/plugins/modules/reservation_info.py ./ansible_collections/cisco/ise/plugins/modules/resource_version_info.py ./ansible_collections/cisco/ise/plugins/modules/rest_id_store.py ./ansible_collections/cisco/ise/plugins/modules/rest_id_store_info.py @@ -4218,6 +4333,8 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/sponsor_portal_info.py ./ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal.py ./ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal_info.py +./ansible_collections/cisco/ise/plugins/modules/stop_replication.py +./ansible_collections/cisco/ise/plugins/modules/stop_replication_info.py ./ansible_collections/cisco/ise/plugins/modules/subscriber.py ./ansible_collections/cisco/ise/plugins/modules/subscriber_bulk.py ./ansible_collections/cisco/ise/plugins/modules/subscriber_imsi_info.py @@ -4253,7 +4370,6 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence_info.py ./ansible_collections/cisco/ise/plugins/modules/tasks_info.py ./ansible_collections/cisco/ise/plugins/modules/telemetry_info.py -./ansible_collections/cisco/ise/plugins/modules/test_connector.py ./ansible_collections/cisco/ise/plugins/modules/threat_vulnerabilities_clear.py ./ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings.py ./ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings_info.py @@ -4261,6 +4377,35 @@ tags.yaml ./ansible_collections/cisco/ise/plugins/modules/trusted_certificate_export_info.py ./ansible_collections/cisco/ise/plugins/modules/trusted_certificate_import.py ./ansible_collections/cisco/ise/plugins/modules/trusted_certificate_info.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app_info.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_create.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_update.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_info.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_create.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_delete.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_update.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_info.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py +./ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_info.py +./ansible_collections/cisco/ise/plugins/modules/upgrade_proceed.py +./ansible_collections/cisco/ise/plugins/modules/upgrade_proceed_info.py +./ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel.py +./ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel_info.py +./ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start.py +./ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start_info.py +./ansible_collections/cisco/ise/plugins/modules/user_equipment.py +./ansible_collections/cisco/ise/plugins/modules/user_equipment_bulk.py +./ansible_collections/cisco/ise/plugins/modules/user_equipment_csv.py +./ansible_collections/cisco/ise/plugins/modules/user_equipment_imei_info.py +./ansible_collections/cisco/ise/plugins/modules/user_equipment_info.py +./ansible_collections/cisco/ise/plugins/modules/user_equipment_subscriber_info.py ./ansible_collections/cisco/ise/plugins/plugin_utils/__init__.py ./ansible_collections/cisco/ise/plugins/plugin_utils/exceptions.py ./ansible_collections/cisco/ise/plugins/plugin_utils/ise.py @@ -5473,10 +5618,11 @@ tags.yaml ./ansible_collections/cisco/nxos/README.md ./ansible_collections/cisco/nxos/bindep.txt ./ansible_collections/cisco/nxos/codecov.yml +./ansible_collections/cisco/nxos/platform_guide.rst ./ansible_collections/cisco/nxos/pyproject.toml ./ansible_collections/cisco/nxos/requirements.txt ./ansible_collections/cisco/nxos/test-requirements.txt -./ansible_collections/cisco/nxos/tox.ini +./ansible_collections/cisco/nxos/tox-ansible.ini ./ansible_collections/cisco/nxos/changelogs/changelog.yaml ./ansible_collections/cisco/nxos/changelogs/config.yaml ./ansible_collections/cisco/nxos/changelogs/fragments/.keep @@ -5839,12 +5985,8 @@ tags.yaml ./ansible_collections/cisco/nxos/plugins/modules/nxos_lag_interfaces.py ./ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_global.py ./ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_interfaces.py -./ansible_collections/cisco/nxos/plugins/modules/nxos_logging.py ./ansible_collections/cisco/nxos/plugins/modules/nxos_logging_global.py -./ansible_collections/cisco/nxos/plugins/modules/nxos_ntp.py -./ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_auth.py ./ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_global.py -./ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_options.py ./ansible_collections/cisco/nxos/plugins/modules/nxos_nxapi.py ./ansible_collections/cisco/nxos/plugins/modules/nxos_ospf_interfaces.py ./ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv2.py @@ -6215,17 +6357,6 @@ tags.yaml ./ansible_collections/community/aws/plugins/modules/wafv2_rule_group_info.py ./ansible_collections/community/aws/plugins/modules/wafv2_web_acl.py ./ansible_collections/community/aws/plugins/modules/wafv2_web_acl_info.py -./ansible_collections/community/azure/CHANGELOG.rst -./ansible_collections/community/azure/COPYING -./ansible_collections/community/azure/FILES.json -./ansible_collections/community/azure/MANIFEST.json -./ansible_collections/community/azure/README.md -./ansible_collections/community/azure/shippable.yml -./ansible_collections/community/azure/changelogs/changelog.yaml -./ansible_collections/community/azure/changelogs/config.yaml -./ansible_collections/community/azure/changelogs/fragments/.keep -./ansible_collections/community/azure/meta/action_groups.yml -./ansible_collections/community/azure/meta/runtime.yml ./ansible_collections/community/ciscosmb/CHANGELOG.rst ./ansible_collections/community/ciscosmb/CODE_OF_CONDUCT.md ./ansible_collections/community/ciscosmb/CONTRIBUTING.md @@ -6289,8 +6420,10 @@ tags.yaml ./ansible_collections/community/crypto/plugins/filter/x509_crl_info.py ./ansible_collections/community/crypto/plugins/lookup/gpg_fingerprint.py ./ansible_collections/community/crypto/plugins/module_utils/_version.py +./ansible_collections/community/crypto/plugins/module_utils/argspec.py ./ansible_collections/community/crypto/plugins/module_utils/io.py ./ansible_collections/community/crypto/plugins/module_utils/serial.py +./ansible_collections/community/crypto/plugins/module_utils/time.py ./ansible_collections/community/crypto/plugins/module_utils/version.py ./ansible_collections/community/crypto/plugins/module_utils/acme/account.py ./ansible_collections/community/crypto/plugins/module_utils/acme/acme.py @@ -6337,7 +6470,10 @@ tags.yaml ./ansible_collections/community/crypto/plugins/module_utils/openssh/backends/keypair_backend.py ./ansible_collections/community/crypto/plugins/modules/acme_account.py ./ansible_collections/community/crypto/plugins/modules/acme_account_info.py +./ansible_collections/community/crypto/plugins/modules/acme_ari_info.py ./ansible_collections/community/crypto/plugins/modules/acme_certificate.py +./ansible_collections/community/crypto/plugins/modules/acme_certificate_deactivate_authz.py +./ansible_collections/community/crypto/plugins/modules/acme_certificate_renewal_info.py ./ansible_collections/community/crypto/plugins/modules/acme_certificate_revoke.py ./ansible_collections/community/crypto/plugins/modules/acme_challenge_cert_helper.py ./ansible_collections/community/crypto/plugins/modules/acme_inspect.py @@ -6533,7 +6669,6 @@ tags.yaml ./ansible_collections/community/dns/plugins/modules/hosttech_dns_record_set.py ./ansible_collections/community/dns/plugins/modules/hosttech_dns_record_set_info.py ./ansible_collections/community/dns/plugins/modules/hosttech_dns_record_sets.py -./ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py ./ansible_collections/community/dns/plugins/modules/hosttech_dns_zone_info.py ./ansible_collections/community/dns/plugins/modules/nameserver_info.py ./ansible_collections/community/dns/plugins/modules/nameserver_record_info.py @@ -6581,6 +6716,7 @@ tags.yaml ./ansible_collections/community/docker/plugins/module_utils/compose_v2.py ./ansible_collections/community/docker/plugins/module_utils/copy.py ./ansible_collections/community/docker/plugins/module_utils/image_archive.py +./ansible_collections/community/docker/plugins/module_utils/selectors.py ./ansible_collections/community/docker/plugins/module_utils/socket_handler.py ./ansible_collections/community/docker/plugins/module_utils/socket_helper.py ./ansible_collections/community/docker/plugins/module_utils/swarm.py @@ -6685,6 +6821,7 @@ tags.yaml ./ansible_collections/community/general/plugins/become/pbrun.py ./ansible_collections/community/general/plugins/become/pfexec.py ./ansible_collections/community/general/plugins/become/pmrun.py +./ansible_collections/community/general/plugins/become/run0.py ./ansible_collections/community/general/plugins/become/sesu.py ./ansible_collections/community/general/plugins/become/sudosu.py ./ansible_collections/community/general/plugins/cache/memcached.py @@ -6715,6 +6852,7 @@ tags.yaml ./ansible_collections/community/general/plugins/callback/splunk.py ./ansible_collections/community/general/plugins/callback/sumologic.py ./ansible_collections/community/general/plugins/callback/syslog_json.py +./ansible_collections/community/general/plugins/callback/timestamp.py ./ansible_collections/community/general/plugins/callback/unixy.py ./ansible_collections/community/general/plugins/callback/yaml.py ./ansible_collections/community/general/plugins/connection/chroot.py @@ -6734,6 +6872,7 @@ tags.yaml ./ansible_collections/community/general/plugins/doc_fragments/consul.py ./ansible_collections/community/general/plugins/doc_fragments/dimensiondata.py ./ansible_collections/community/general/plugins/doc_fragments/dimensiondata_wait.py +./ansible_collections/community/general/plugins/doc_fragments/django.py ./ansible_collections/community/general/plugins/doc_fragments/emc.py ./ansible_collections/community/general/plugins/doc_fragments/gitlab.py ./ansible_collections/community/general/plugins/doc_fragments/hpe3par.py @@ -6760,7 +6899,6 @@ tags.yaml ./ansible_collections/community/general/plugins/doc_fragments/pritunl.py ./ansible_collections/community/general/plugins/doc_fragments/proxmox.py ./ansible_collections/community/general/plugins/doc_fragments/purestorage.py -./ansible_collections/community/general/plugins/doc_fragments/rackspace.py ./ansible_collections/community/general/plugins/doc_fragments/redis.py ./ansible_collections/community/general/plugins/doc_fragments/rundeck.py ./ansible_collections/community/general/plugins/doc_fragments/scaleway.py @@ -6860,11 +6998,13 @@ tags.yaml ./ansible_collections/community/general/plugins/module_utils/datetime.py ./ansible_collections/community/general/plugins/module_utils/deps.py ./ansible_collections/community/general/plugins/module_utils/dimensiondata.py +./ansible_collections/community/general/plugins/module_utils/django.py ./ansible_collections/community/general/plugins/module_utils/gandi_livedns_api.py ./ansible_collections/community/general/plugins/module_utils/gconftool2.py ./ansible_collections/community/general/plugins/module_utils/gio_mime.py ./ansible_collections/community/general/plugins/module_utils/gitlab.py ./ansible_collections/community/general/plugins/module_utils/heroku.py +./ansible_collections/community/general/plugins/module_utils/homebrew.py ./ansible_collections/community/general/plugins/module_utils/hwc_utils.py ./ansible_collections/community/general/plugins/module_utils/ibm_sa_utils.py ./ansible_collections/community/general/plugins/module_utils/ilo_redfish_utils.py @@ -6889,7 +7029,7 @@ tags.yaml ./ansible_collections/community/general/plugins/module_utils/proxmox.py ./ansible_collections/community/general/plugins/module_utils/puppet.py ./ansible_collections/community/general/plugins/module_utils/pure.py -./ansible_collections/community/general/plugins/module_utils/rax.py +./ansible_collections/community/general/plugins/module_utils/python_runner.py ./ansible_collections/community/general/plugins/module_utils/redfish_utils.py ./ansible_collections/community/general/plugins/module_utils/redhat.py ./ansible_collections/community/general/plugins/module_utils/redis.py @@ -6999,6 +7139,7 @@ tags.yaml ./ansible_collections/community/general/plugins/modules/dimensiondata_network.py ./ansible_collections/community/general/plugins/modules/dimensiondata_vlan.py ./ansible_collections/community/general/plugins/modules/discord.py +./ansible_collections/community/general/plugins/modules/django_command.py ./ansible_collections/community/general/plugins/modules/django_manage.py ./ansible_collections/community/general/plugins/modules/dnf_config_manager.py ./ansible_collections/community/general/plugins/modules/dnf_versionlock.py @@ -7017,7 +7158,6 @@ tags.yaml ./ansible_collections/community/general/plugins/modules/filesystem.py ./ansible_collections/community/general/plugins/modules/flatpak.py ./ansible_collections/community/general/plugins/modules/flatpak_remote.py -./ansible_collections/community/general/plugins/modules/flowdock.py ./ansible_collections/community/general/plugins/modules/gandi_livedns.py ./ansible_collections/community/general/plugins/modules/gconftool2.py ./ansible_collections/community/general/plugins/modules/gconftool2_info.py @@ -7349,32 +7489,6 @@ tags.yaml ./ansible_collections/community/general/plugins/modules/pushbullet.py ./ansible_collections/community/general/plugins/modules/pushover.py ./ansible_collections/community/general/plugins/modules/python_requirements_info.py -./ansible_collections/community/general/plugins/modules/rax.py -./ansible_collections/community/general/plugins/modules/rax_cbs.py -./ansible_collections/community/general/plugins/modules/rax_cbs_attachments.py -./ansible_collections/community/general/plugins/modules/rax_cdb.py -./ansible_collections/community/general/plugins/modules/rax_cdb_database.py -./ansible_collections/community/general/plugins/modules/rax_cdb_user.py -./ansible_collections/community/general/plugins/modules/rax_clb.py -./ansible_collections/community/general/plugins/modules/rax_clb_nodes.py -./ansible_collections/community/general/plugins/modules/rax_clb_ssl.py -./ansible_collections/community/general/plugins/modules/rax_dns.py -./ansible_collections/community/general/plugins/modules/rax_dns_record.py -./ansible_collections/community/general/plugins/modules/rax_facts.py -./ansible_collections/community/general/plugins/modules/rax_files.py -./ansible_collections/community/general/plugins/modules/rax_files_objects.py -./ansible_collections/community/general/plugins/modules/rax_identity.py -./ansible_collections/community/general/plugins/modules/rax_keypair.py -./ansible_collections/community/general/plugins/modules/rax_meta.py -./ansible_collections/community/general/plugins/modules/rax_mon_alarm.py -./ansible_collections/community/general/plugins/modules/rax_mon_check.py -./ansible_collections/community/general/plugins/modules/rax_mon_entity.py -./ansible_collections/community/general/plugins/modules/rax_mon_notification.py -./ansible_collections/community/general/plugins/modules/rax_mon_notification_plan.py -./ansible_collections/community/general/plugins/modules/rax_network.py -./ansible_collections/community/general/plugins/modules/rax_queue.py -./ansible_collections/community/general/plugins/modules/rax_scaling_group.py -./ansible_collections/community/general/plugins/modules/rax_scaling_policy.py ./ansible_collections/community/general/plugins/modules/read_csv.py ./ansible_collections/community/general/plugins/modules/redfish_command.py ./ansible_collections/community/general/plugins/modules/redfish_config.py @@ -7455,7 +7569,6 @@ tags.yaml ./ansible_collections/community/general/plugins/modules/spotinst_aws_elastigroup.py ./ansible_collections/community/general/plugins/modules/ss_3par_cpg.py ./ansible_collections/community/general/plugins/modules/ssh_config.py -./ansible_collections/community/general/plugins/modules/stackdriver.py ./ansible_collections/community/general/plugins/modules/stacki_host.py ./ansible_collections/community/general/plugins/modules/statsd.py ./ansible_collections/community/general/plugins/modules/statusio_maintenance.py @@ -7509,11 +7622,6 @@ tags.yaml ./ansible_collections/community/general/plugins/modules/wakeonlan.py ./ansible_collections/community/general/plugins/modules/wdc_redfish_command.py ./ansible_collections/community/general/plugins/modules/wdc_redfish_info.py -./ansible_collections/community/general/plugins/modules/webfaction_app.py -./ansible_collections/community/general/plugins/modules/webfaction_db.py -./ansible_collections/community/general/plugins/modules/webfaction_domain.py -./ansible_collections/community/general/plugins/modules/webfaction_mailbox.py -./ansible_collections/community/general/plugins/modules/webfaction_site.py ./ansible_collections/community/general/plugins/modules/xattr.py ./ansible_collections/community/general/plugins/modules/xbps.py ./ansible_collections/community/general/plugins/modules/xcc_redfish_command.py @@ -7597,6 +7705,16 @@ tags.yaml ./ansible_collections/community/grafana/changelogs/fragments/347-folder-for-orgs.yml ./ansible_collections/community/grafana/changelogs/fragments/349-role-notification-channel.yml ./ansible_collections/community/grafana/changelogs/fragments/350-python3.12.yml +./ansible_collections/community/grafana/changelogs/fragments/353-docs-add-influxdb-flux-example.yml +./ansible_collections/community/grafana/changelogs/fragments/354-fix-find-grafana-versions.yml +./ansible_collections/community/grafana/changelogs/fragments/355-rm-dashboard-message-argument.yml +./ansible_collections/community/grafana/changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml +./ansible_collections/community/grafana/changelogs/fragments/357-module-grafana-silence.yml +./ansible_collections/community/grafana/changelogs/fragments/358-role-grafana-silence.yml +./ansible_collections/community/grafana/changelogs/fragments/362-plugin-umask.yml +./ansible_collections/community/grafana/changelogs/fragments/364-first-datasource-default.yml +./ansible_collections/community/grafana/changelogs/fragments/367-dashboard-undo-breaing-change-message.yml +./ansible_collections/community/grafana/changelogs/fragments/368-molecule-pin-requests.yml ./ansible_collections/community/grafana/changelogs/fragments/add-units-datasource.yml ./ansible_collections/community/grafana/changelogs/fragments/ci.yml ./ansible_collections/community/grafana/changelogs/fragments/datasource-issue-204.yml @@ -7631,6 +7749,7 @@ tags.yaml ./ansible_collections/community/grafana/plugins/modules/grafana_organization.py ./ansible_collections/community/grafana/plugins/modules/grafana_organization_user.py ./ansible_collections/community/grafana/plugins/modules/grafana_plugin.py +./ansible_collections/community/grafana/plugins/modules/grafana_silence.py ./ansible_collections/community/grafana/plugins/modules/grafana_team.py ./ansible_collections/community/grafana/plugins/modules/grafana_user.py ./ansible_collections/community/grafana/roles/grafana/README.md @@ -8580,9 +8699,8 @@ tags.yaml ./ansible_collections/community/okd/codecov.yml ./ansible_collections/community/okd/requirements.txt ./ansible_collections/community/okd/requirements.yml -./ansible_collections/community/okd/setup.cfg ./ansible_collections/community/okd/test-requirements.txt -./ansible_collections/community/okd/changelogs/.plugin-cache.yaml +./ansible_collections/community/okd/tox.ini ./ansible_collections/community/okd/changelogs/changelog.yaml ./ansible_collections/community/okd/changelogs/config.yaml ./ansible_collections/community/okd/ci/Dockerfile @@ -8824,24 +8942,6 @@ tags.yaml ./ansible_collections/community/routeros/plugins/modules/command.py ./ansible_collections/community/routeros/plugins/modules/facts.py ./ansible_collections/community/routeros/plugins/terminal/routeros.py -./ansible_collections/community/sap/CHANGELOG.rst -./ansible_collections/community/sap/CODE_OF_CONDUCT.md -./ansible_collections/community/sap/CONTRIBUTING.md -./ansible_collections/community/sap/FILES.json -./ansible_collections/community/sap/LICENSE -./ansible_collections/community/sap/MAINTAINERS -./ansible_collections/community/sap/MAINTAINING.md -./ansible_collections/community/sap/MANIFEST.json -./ansible_collections/community/sap/README.md -./ansible_collections/community/sap/REVIEW_CHECKLIST.md -./ansible_collections/community/sap/codecov.yml -./ansible_collections/community/sap/changelogs/changelog.yaml -./ansible_collections/community/sap/changelogs/config.yaml -./ansible_collections/community/sap/changelogs/fragments/.keep -./ansible_collections/community/sap/meta/runtime.yml -./ansible_collections/community/sap/plugins/doc_fragments/__init__.py -./ansible_collections/community/sap/plugins/module_utils/__init__.py -./ansible_collections/community/sap/plugins/modules/__init__.py ./ansible_collections/community/sap_libs/CHANGELOG.rst ./ansible_collections/community/sap_libs/CODE_OF_CONDUCT.md ./ansible_collections/community/sap_libs/CONTRIBUTING.md @@ -9403,6 +9503,7 @@ tags.yaml ./ansible_collections/community/zabbix/plugins/modules/zabbix_api_info.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_authentication.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_autoregister.py +./ansible_collections/community/zabbix/plugins/modules/zabbix_correlation.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_discovery_rule.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_globalmacro.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_group.py @@ -9421,6 +9522,7 @@ tags.yaml ./ansible_collections/community/zabbix/plugins/modules/zabbix_regexp.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_script.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_service.py +./ansible_collections/community/zabbix/plugins/modules/zabbix_service_info.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_settings.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_template.py ./ansible_collections/community/zabbix/plugins/modules/zabbix_template_info.py @@ -9511,9 +9613,9 @@ tags.yaml ./ansible_collections/community/zabbix/roles/zabbix_server/meta/main.yml ./ansible_collections/community/zabbix/roles/zabbix_server/tasks/Debian.yml ./ansible_collections/community/zabbix/roles/zabbix_server/tasks/RedHat.yml +./ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-mysql.yml +./ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-pgsql.yml ./ansible_collections/community/zabbix/roles/zabbix_server/tasks/main.yml -./ansible_collections/community/zabbix/roles/zabbix_server/tasks/mysql.yml -./ansible_collections/community/zabbix/roles/zabbix_server/tasks/postgresql.yml ./ansible_collections/community/zabbix/roles/zabbix_server/tasks/scripts.yml ./ansible_collections/community/zabbix/roles/zabbix_server/tasks/selinux.yml ./ansible_collections/community/zabbix/roles/zabbix_server/templates/zabbix_server.conf.j2 @@ -10089,12 +10191,12 @@ tags.yaml ./ansible_collections/dellemc/openmanage/changelogs/config.yaml ./ansible_collections/dellemc/openmanage/meta/execution-environment.yml ./ansible_collections/dellemc/openmanage/meta/runtime.yml -./ansible_collections/dellemc/openmanage/playbooks/idrac/dellemc_idrac_storage_volume.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_attributes.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_bios.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_boot.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_boot_virtual_media_workflow.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_certificates.yml +./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_diagnostics.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_firmware.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_firmware_info.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_license.yml @@ -10109,6 +10211,8 @@ tags.yaml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset_result_tracking.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_server_config_profile.yml +./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_session.yml +./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_storage_volume.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_syslog.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_system_info.yml ./ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_user.yml @@ -10226,6 +10330,7 @@ tags.yaml ./ansible_collections/dellemc/openmanage/playbooks/roles/idrac_reset/idrac_reset.yml ./ansible_collections/dellemc/openmanage/playbooks/roles/idrac_server_powerstate/idrac_server_powerstate.yml ./ansible_collections/dellemc/openmanage/playbooks/roles/idrac_storage_controller/idrac_storage_controller.yml +./ansible_collections/dellemc/openmanage/playbooks/roles/idrac_user/idrac_user.yml ./ansible_collections/dellemc/openmanage/playbooks/roles/redfish_firmware/redfish_firmware.yml ./ansible_collections/dellemc/openmanage/playbooks/roles/redfish_storage_volume/redfish_storage_volume.yml ./ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/attributes.yml @@ -10239,6 +10344,7 @@ tags.yaml ./ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/reset.yml ./ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/storage.yml ./ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/storage_controller.yml +./ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/user.yml ./ansible_collections/dellemc/openmanage/plugins/README.md ./ansible_collections/dellemc/openmanage/plugins/doc_fragments/__init__.py ./ansible_collections/dellemc/openmanage/plugins/doc_fragments/idrac_auth_options.py @@ -10253,6 +10359,7 @@ tags.yaml ./ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_redfish.py ./ansible_collections/dellemc/openmanage/plugins/module_utils/ome.py ./ansible_collections/dellemc/openmanage/plugins/module_utils/redfish.py +./ansible_collections/dellemc/openmanage/plugins/module_utils/session_utils.py ./ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py ./ansible_collections/dellemc/openmanage/plugins/modules/__init__.py ./ansible_collections/dellemc/openmanage/plugins/modules/dellemc_configure_idrac_eventing.py @@ -10264,6 +10371,7 @@ tags.yaml ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_bios.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_boot.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_certificates.py +./ansible_collections/dellemc/openmanage/plugins/modules/idrac_diagnostics.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_firmware.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_firmware_info.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_license.py @@ -10277,6 +10385,8 @@ tags.yaml ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_redfish_storage_controller.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_reset.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_server_config_profile.py +./ansible_collections/dellemc/openmanage/plugins/modules/idrac_session.py +./ansible_collections/dellemc/openmanage/plugins/modules/idrac_storage_volume.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_syslog.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_system_info.py ./ansible_collections/dellemc/openmanage/plugins/modules/idrac_timezone_ntp.py @@ -10592,7 +10702,6 @@ tags.yaml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tasks/main.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/inventory ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/test.yml -./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/backplane_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/controller_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/cpu_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/enclosure_assert.yml @@ -10608,7 +10717,6 @@ tags.yaml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/nic_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/passensor_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/pciedevice_assert.yml -./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/powersupply_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/psmetrics_assert.yml ./ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/secureboot_assert.yml @@ -10624,24 +10732,18 @@ tags.yaml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/meta/main.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/molecule.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/molecule.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/prepare.yml @@ -10650,11 +10752,13 @@ tags.yaml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_xml/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml -./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml +./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml +./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml +./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml +./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/tasks/main.yml ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/tests/inventory ./ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/tests/test.yml @@ -10757,6 +10861,37 @@ tags.yaml ./ansible_collections/dellemc/openmanage/roles/idrac_storage_controller/tests/inventory ./ansible_collections/dellemc/openmanage/roles/idrac_storage_controller/tests/test.yml ./ansible_collections/dellemc/openmanage/roles/idrac_storage_controller/vars/main.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/README.md +./ansible_collections/dellemc/openmanage/roles/idrac_user/defaults/main.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/handlers/main.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/meta/argument_specs.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/meta/main.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/converge.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/molecule.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/converge.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/molecule.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/converge.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/molecule.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/converge.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/molecule.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/prepare.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/converge.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/molecule.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/prepare.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/converge.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/molecule.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/prepare.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/converge.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/molecule.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/cleanup.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/absent.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/get_user.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/main.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/present.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/tests/inventory +./ansible_collections/dellemc/openmanage/roles/idrac_user/tests/test.yml +./ansible_collections/dellemc/openmanage/roles/idrac_user/vars/main.yml ./ansible_collections/dellemc/openmanage/roles/redfish_firmware/README.md ./ansible_collections/dellemc/openmanage/roles/redfish_firmware/defaults/main.yml ./ansible_collections/dellemc/openmanage/roles/redfish_firmware/handlers/main.yml @@ -10777,10 +10912,12 @@ tags.yaml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/handlers/main.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/meta/argument_specs.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/meta/main.yml +./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__create_virtual_drive.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__delete_virtual_drive.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__extract_storage.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__get_helper.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__idrac_reset.yml +./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__job_track.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__lc_status.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/RAID0/converge.yml ./ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/RAID0/molecule.yml @@ -11343,6 +11480,7 @@ tags.yaml ./ansible_collections/fortinet/fortimanager/changelogs/fragments/2.3.0.yml ./ansible_collections/fortinet/fortimanager/changelogs/fragments/2.3.1.yml ./ansible_collections/fortinet/fortimanager/changelogs/fragments/2.4.0.yml +./ansible_collections/fortinet/fortimanager/changelogs/fragments/2.5.0.yml ./ansible_collections/fortinet/fortimanager/meta/runtime.yml ./ansible_collections/fortinet/fortimanager/plugins/README.md ./ansible_collections/fortinet/fortimanager/plugins/httpapi/fortimanager.py @@ -13274,18 +13412,6 @@ tags.yaml ./ansible_collections/frr/frr/plugins/modules/frr_facts.py ./ansible_collections/frr/frr/plugins/terminal/__init__.py ./ansible_collections/frr/frr/plugins/terminal/frr.py -./ansible_collections/gluster/gluster/CHANGELOG.rst -./ansible_collections/gluster/gluster/FILES.json -./ansible_collections/gluster/gluster/LICENSE -./ansible_collections/gluster/gluster/MANIFEST.json -./ansible_collections/gluster/gluster/README.md -./ansible_collections/gluster/gluster/changelogs/changelog.yaml -./ansible_collections/gluster/gluster/changelogs/config.yaml -./ansible_collections/gluster/gluster/meta/runtime.yml -./ansible_collections/gluster/gluster/plugins/modules/geo_rep.py -./ansible_collections/gluster/gluster/plugins/modules/gluster_heal_info.py -./ansible_collections/gluster/gluster/plugins/modules/gluster_peer.py -./ansible_collections/gluster/gluster/plugins/modules/gluster_volume.py ./ansible_collections/google/cloud/CHANGELOG.rst ./ansible_collections/google/cloud/CONTRIBUTING.md ./ansible_collections/google/cloud/FILES.json @@ -13537,8 +13663,15 @@ tags.yaml ./ansible_collections/grafana/grafana/changelogs/config.yaml ./ansible_collections/grafana/grafana/examples/agent-basic-no-options.yaml ./ansible_collections/grafana/grafana/examples/agent-send-to-grafana-cloud.yaml +./ansible_collections/grafana/grafana/examples/alloy.yaml ./ansible_collections/grafana/grafana/examples/ansible.cfg -./ansible_collections/grafana/grafana/examples/monitor-multiple-instances.md +./ansible_collections/grafana/grafana/examples/loki-basic-no-options.yml +./ansible_collections/grafana/grafana/examples/loki-local-filesystem-with-retention-and-alert.yml +./ansible_collections/grafana/grafana/examples/mimir-3-hosts.yaml +./ansible_collections/grafana/grafana/examples/monitor-multiple-instance-otel.md +./ansible_collections/grafana/grafana/examples/monitor-multiple-instances-agent.md +./ansible_collections/grafana/grafana/examples/opentelemetry-collector.yml +./ansible_collections/grafana/grafana/examples/promtail-multiple-logs.yml ./ansible_collections/grafana/grafana/meta/runtime.yml ./ansible_collections/grafana/grafana/plugins/modules/alert_contact_point.py ./ansible_collections/grafana/grafana/plugins/modules/alert_notification_policy.py @@ -13548,6 +13681,17 @@ tags.yaml ./ansible_collections/grafana/grafana/plugins/modules/dashboard.py ./ansible_collections/grafana/grafana/plugins/modules/datasource.py ./ansible_collections/grafana/grafana/plugins/modules/folder.py +./ansible_collections/grafana/grafana/roles/alloy/README.md +./ansible_collections/grafana/grafana/roles/alloy/defaults/main.yml +./ansible_collections/grafana/grafana/roles/alloy/handlers/main.yml +./ansible_collections/grafana/grafana/roles/alloy/meta/main.yml +./ansible_collections/grafana/grafana/roles/alloy/tasks/configure.yml +./ansible_collections/grafana/grafana/roles/alloy/tasks/install.yml +./ansible_collections/grafana/grafana/roles/alloy/tasks/main.yml +./ansible_collections/grafana/grafana/roles/alloy/tasks/service.yml +./ansible_collections/grafana/grafana/roles/alloy/templates/alloy.service.j2 +./ansible_collections/grafana/grafana/roles/alloy/templates/config.alloy.j2 +./ansible_collections/grafana/grafana/roles/alloy/templates/environment.j2 ./ansible_collections/grafana/grafana/roles/grafana/README.md ./ansible_collections/grafana/grafana/roles/grafana/test-requirements.txt ./ansible_collections/grafana/grafana/roles/grafana/defaults/main.yml @@ -13595,6 +13739,65 @@ tags.yaml ./ansible_collections/grafana/grafana/roles/grafana_agent/templates/config.yaml.j2 ./ansible_collections/grafana/grafana/roles/grafana_agent/templates/grafana-agent.service.j2 ./ansible_collections/grafana/grafana/roles/grafana_agent/vars/main.yaml +./ansible_collections/grafana/grafana/roles/loki/README.md +./ansible_collections/grafana/grafana/roles/loki/defaults/main.yml +./ansible_collections/grafana/grafana/roles/loki/handlers/main.yml +./ansible_collections/grafana/grafana/roles/loki/meta/main.yml +./ansible_collections/grafana/grafana/roles/loki/molecule/default/converge.yml +./ansible_collections/grafana/grafana/roles/loki/molecule/default/molecule.yml +./ansible_collections/grafana/grafana/roles/loki/tasks/deploy.yml +./ansible_collections/grafana/grafana/roles/loki/tasks/main.yml +./ansible_collections/grafana/grafana/roles/loki/tasks/setup-Debian.yml +./ansible_collections/grafana/grafana/roles/loki/tasks/setup-RedHat.yml +./ansible_collections/grafana/grafana/roles/loki/tasks/uninstall.yml +./ansible_collections/grafana/grafana/roles/loki/templates/config.yml.j2 +./ansible_collections/grafana/grafana/roles/loki/templates/rules.yml.j2 +./ansible_collections/grafana/grafana/roles/loki/vars/Debian.yml +./ansible_collections/grafana/grafana/roles/loki/vars/RedHat.yml +./ansible_collections/grafana/grafana/roles/mimir/README.md +./ansible_collections/grafana/grafana/roles/mimir/defaults/main.yml +./ansible_collections/grafana/grafana/roles/mimir/files/.gitkeep +./ansible_collections/grafana/grafana/roles/mimir/handlers/main.yml +./ansible_collections/grafana/grafana/roles/mimir/meta/main.yml +./ansible_collections/grafana/grafana/roles/mimir/molecule/test-requirements.txt +./ansible_collections/grafana/grafana/roles/mimir/molecule/default/converge.yml +./ansible_collections/grafana/grafana/roles/mimir/molecule/default/molecule.yml +./ansible_collections/grafana/grafana/roles/mimir/molecule/default/tests/test_default.py +./ansible_collections/grafana/grafana/roles/mimir/tasks/deploy.yml +./ansible_collections/grafana/grafana/roles/mimir/tasks/main.yml +./ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Debian.yml +./ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Redhat.yml +./ansible_collections/grafana/grafana/roles/mimir/tasks/uninstall.yml +./ansible_collections/grafana/grafana/roles/mimir/templates/.gitkeep +./ansible_collections/grafana/grafana/roles/mimir/templates/config.yml.j2 +./ansible_collections/grafana/grafana/roles/mimir/vars/.gitkeep +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/README.md +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/defaults/main.yml +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/handlers/main.yml +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/meta/main.yml +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/configure.yml +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/install.yml +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/main.yml +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/service.yml +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector.service.j2 +./ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector_config.yml.j2 +./ansible_collections/grafana/grafana/roles/promtail/README.md +./ansible_collections/grafana/grafana/roles/promtail/defaults/main.yml +./ansible_collections/grafana/grafana/roles/promtail/handlers/main.yml +./ansible_collections/grafana/grafana/roles/promtail/meta/main.yml +./ansible_collections/grafana/grafana/roles/promtail/molecule/default/converge.yml +./ansible_collections/grafana/grafana/roles/promtail/molecule/default/molecule.yml +./ansible_collections/grafana/grafana/roles/promtail/tasks/acl_configuration.yml +./ansible_collections/grafana/grafana/roles/promtail/tasks/deploy.yml +./ansible_collections/grafana/grafana/roles/promtail/tasks/main.yml +./ansible_collections/grafana/grafana/roles/promtail/tasks/setup-Debian.yml +./ansible_collections/grafana/grafana/roles/promtail/tasks/setup-RedHat.yml +./ansible_collections/grafana/grafana/roles/promtail/tasks/uninstall.yml +./ansible_collections/grafana/grafana/roles/promtail/templates/config.yml.j2 +./ansible_collections/grafana/grafana/roles/promtail/templates/promtail.service.j2 +./ansible_collections/grafana/grafana/roles/promtail/templates/promtail_acl.j2 +./ansible_collections/grafana/grafana/roles/promtail/vars/Debian.yml +./ansible_collections/grafana/grafana/roles/promtail/vars/RedHat.yml ./ansible_collections/grafana/grafana/tools/lint-ansible.sh ./ansible_collections/grafana/grafana/tools/lint-editorconfig.sh ./ansible_collections/grafana/grafana/tools/lint-markdown.sh @@ -13736,45 +13939,13 @@ tags.yaml ./ansible_collections/hetzner/hcloud/plugins/modules/volume_info.py ./ansible_collections/hetzner/hcloud/scripts/integration-test-files.sh ./ansible_collections/hetzner/hcloud/scripts/vendor.py -./ansible_collections/hpe/nimble/CHANGELOG.rst -./ansible_collections/hpe/nimble/FILES.json -./ansible_collections/hpe/nimble/MANIFEST.json -./ansible_collections/hpe/nimble/README.md -./ansible_collections/hpe/nimble/bindep.txt -./ansible_collections/hpe/nimble/requirements.txt -./ansible_collections/hpe/nimble/changelogs/changelog.yaml -./ansible_collections/hpe/nimble/changelogs/config.yaml -./ansible_collections/hpe/nimble/meta/runtime.yml -./ansible_collections/hpe/nimble/plugins/doc_fragments/hpe_nimble.py -./ansible_collections/hpe/nimble/plugins/module_utils/hpe_nimble.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_access_control_record.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_array.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_chap_user.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_disk.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_encryption.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_fc.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_group.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_info.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_initiator_group.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_network.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_partner.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_performance_policy.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_pool.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_schedule.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_template.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_shelf.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot_collection.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user_policy.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume.py -./ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume_collection.py ./ansible_collections/ibm/qradar/CHANGELOG.rst ./ansible_collections/ibm/qradar/FILES.json ./ansible_collections/ibm/qradar/LICENSE ./ansible_collections/ibm/qradar/MANIFEST.json ./ansible_collections/ibm/qradar/README.md ./ansible_collections/ibm/qradar/bindep.txt +./ansible_collections/ibm/qradar/codecov.yml ./ansible_collections/ibm/qradar/pyproject.toml ./ansible_collections/ibm/qradar/requirements.txt ./ansible_collections/ibm/qradar/test-requirements.txt @@ -14261,6 +14432,617 @@ tags.yaml ./ansible_collections/inspur/ispim/plugins/modules/user_info.py ./ansible_collections/inspur/ispim/plugins/modules/virtual_media_info.py ./ansible_collections/inspur/ispim/plugins/modules/volt_info.py +./ansible_collections/inspur/ispim/venv/.gitignore +./ansible_collections/inspur/ispim/venv/pyvenv.cfg +./ansible_collections/inspur/ispim/venv/Lib/site-packages/_virtualenv.pth +./ansible_collections/inspur/ispim/venv/Lib/site-packages/_virtualenv.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/distutils-precedence.pth +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.virtualenv +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.virtualenv +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.virtualenv +./ansible_collections/inspur/ispim/venv/Lib/site-packages/_distutils_hack/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/_distutils_hack/override.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/__main__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/py.typed +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/INSTALLER +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/LICENSE.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/METADATA +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/RECORD +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/WHEEL +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/entry_points.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/top_level.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/build_env.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cache.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/configuration.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/exceptions.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/main.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/pyproject.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/wheel_builder.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/base_command.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/command_context.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/main.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/parser.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/req_command.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/spinners.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/cache.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/check.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/completion.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/configuration.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/debug.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/download.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/freeze.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/hash.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/help.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/install.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/list.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/search.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/show.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/installed.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/collector.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/package_finder.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/sources.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/_distutils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/metadata/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/metadata/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/candidate.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/direct_url.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/format_control.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/index.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/link.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/scheme.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/search_scope.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/target_python.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/auth.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/cache.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/download.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/session.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/check.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/freeze.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/prepare.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/constructors.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_file.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_install.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_set.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_tracker.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/datetime.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/encoding.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/glibc.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/hashes.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/logging.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/misc.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/models.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/packaging.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/parallel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/urls.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/git.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/appdirs.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distro.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pyparsing.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/six.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/vendor.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/core.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/enums.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/win32.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/database.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/index.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/locators.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/markers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/codec.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/core.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/build.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/check.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/meta.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/bar.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/counter.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/spinner.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/api.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/auth.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/certs.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/help.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/models.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/packages.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/structures.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/after.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/before.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/nap.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/retry.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/stop.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/wait.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/decoder.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/encoder.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/ordered.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/tz.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/extern/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_deprecation_warning.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_imp.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/archive_util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/build_meta.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/cli-32.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/cli-64.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/cli.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/config.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/dep_util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/depends.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/dist.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/errors.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/extension.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/glob.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/gui-32.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/gui-64.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/gui.exe +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/installer.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/launch.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/lib2to3_ex.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/monkey.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/msvc.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/namespaces.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/package_index.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/py34compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/sandbox.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/script (dev).tmpl +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/script.tmpl +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/ssl_support.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/unicode_utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/windows_support.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/INSTALLER +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/LICENSE +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/METADATA +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/RECORD +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/WHEEL +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/dependency_links.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/entry_points.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/top_level.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/archive_util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/cmd.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/config.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/core.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/debug.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/dep_util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/dir_util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/dist.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/errors.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/extension.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/file_util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/filelist.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/log.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/py35compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/py38compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/spawn.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/text_file.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/check.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/clean.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/config.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/register.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/upload.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/alias.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/bdist_egg.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/bdist_rpm.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/build_clib.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/build_ext.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/build_py.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/develop.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/dist_info.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/easy_install.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/egg_info.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install_egg_info.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install_lib.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install_scripts.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/launcher manifest.xml +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/py36compat.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/register.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/rotate.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/saveopts.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/sdist.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/setopt.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/test.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/upload.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/upload_docs.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/extern/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/__main__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/bdist_wheel.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/macosx_libfile.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/metadata.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/pkginfo.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/util.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/wheelfile.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/INSTALLER +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/LICENSE.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/METADATA +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/RECORD +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/WHEEL +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/entry_points.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/top_level.txt +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/convert.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/pack.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/unpack.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/packaging/__init__.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/packaging/_typing.py +./ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/packaging/tags.py +./ansible_collections/inspur/ispim/venv/Scripts/activate +./ansible_collections/inspur/ispim/venv/Scripts/activate.bat +./ansible_collections/inspur/ispim/venv/Scripts/activate.fish +./ansible_collections/inspur/ispim/venv/Scripts/activate.ps1 +./ansible_collections/inspur/ispim/venv/Scripts/activate.xsh +./ansible_collections/inspur/ispim/venv/Scripts/activate_this.py +./ansible_collections/inspur/ispim/venv/Scripts/deactivate.bat +./ansible_collections/inspur/ispim/venv/Scripts/pip-3.7.exe +./ansible_collections/inspur/ispim/venv/Scripts/pip.exe +./ansible_collections/inspur/ispim/venv/Scripts/pip3.7.exe +./ansible_collections/inspur/ispim/venv/Scripts/pip3.exe +./ansible_collections/inspur/ispim/venv/Scripts/pydoc.bat +./ansible_collections/inspur/ispim/venv/Scripts/python.exe +./ansible_collections/inspur/ispim/venv/Scripts/pythonw.exe +./ansible_collections/inspur/ispim/venv/Scripts/wheel-3.7.exe +./ansible_collections/inspur/ispim/venv/Scripts/wheel.exe +./ansible_collections/inspur/ispim/venv/Scripts/wheel3.7.exe +./ansible_collections/inspur/ispim/venv/Scripts/wheel3.exe ./ansible_collections/inspur/sm/CHANGELOG.rst ./ansible_collections/inspur/sm/CODE_OF_CONDUCT.md ./ansible_collections/inspur/sm/FILES.json @@ -14566,13 +15348,53 @@ tags.yaml ./ansible_collections/junipernetworks/junos/pyproject.toml ./ansible_collections/junipernetworks/junos/requirements.txt ./ansible_collections/junipernetworks/junos/test-requirements.txt -./ansible_collections/junipernetworks/junos/tox.ini +./ansible_collections/junipernetworks/junos/tox-ansible.ini ./ansible_collections/junipernetworks/junos/changelogs/changelog.yaml ./ansible_collections/junipernetworks/junos/changelogs/config.yaml ./ansible_collections/junipernetworks/junos/changelogs/fragments/.keep ./ansible_collections/junipernetworks/junos/meta/runtime.yml ./ansible_collections/junipernetworks/junos/plugins/action/__init__.py +./ansible_collections/junipernetworks/junos/plugins/action/acl_interfaces.py +./ansible_collections/junipernetworks/junos/plugins/action/acls.py +./ansible_collections/junipernetworks/junos/plugins/action/banner.py +./ansible_collections/junipernetworks/junos/plugins/action/bgp_address_family.py +./ansible_collections/junipernetworks/junos/plugins/action/bgp_global.py +./ansible_collections/junipernetworks/junos/plugins/action/command.py +./ansible_collections/junipernetworks/junos/plugins/action/config.py +./ansible_collections/junipernetworks/junos/plugins/action/facts.py +./ansible_collections/junipernetworks/junos/plugins/action/hostname.py +./ansible_collections/junipernetworks/junos/plugins/action/interfaces.py ./ansible_collections/junipernetworks/junos/plugins/action/junos.py +./ansible_collections/junipernetworks/junos/plugins/action/l2_interfaces.py +./ansible_collections/junipernetworks/junos/plugins/action/l3_intefaces.py +./ansible_collections/junipernetworks/junos/plugins/action/lacp.py +./ansible_collections/junipernetworks/junos/plugins/action/lacp_intefaces.py +./ansible_collections/junipernetworks/junos/plugins/action/lag_interfaces.py +./ansible_collections/junipernetworks/junos/plugins/action/lldp_global.py +./ansible_collections/junipernetworks/junos/plugins/action/lldp_interfaces.py +./ansible_collections/junipernetworks/junos/plugins/action/logging.py +./ansible_collections/junipernetworks/junos/plugins/action/logging_global.py +./ansible_collections/junipernetworks/junos/plugins/action/netconf.py +./ansible_collections/junipernetworks/junos/plugins/action/ntp_global.py +./ansible_collections/junipernetworks/junos/plugins/action/ospf_interfaces.py +./ansible_collections/junipernetworks/junos/plugins/action/ospfv2.py +./ansible_collections/junipernetworks/junos/plugins/action/ospfv3.py +./ansible_collections/junipernetworks/junos/plugins/action/package.py +./ansible_collections/junipernetworks/junos/plugins/action/ping.py +./ansible_collections/junipernetworks/junos/plugins/action/prefix_lists.py +./ansible_collections/junipernetworks/junos/plugins/action/routing_instances.py +./ansible_collections/junipernetworks/junos/plugins/action/routing_options.py +./ansible_collections/junipernetworks/junos/plugins/action/rpc.py +./ansible_collections/junipernetworks/junos/plugins/action/scp.py +./ansible_collections/junipernetworks/junos/plugins/action/security_policies.py +./ansible_collections/junipernetworks/junos/plugins/action/security_policies_global.py +./ansible_collections/junipernetworks/junos/plugins/action/security_zones.py +./ansible_collections/junipernetworks/junos/plugins/action/snmp_server.py +./ansible_collections/junipernetworks/junos/plugins/action/static_routes.py +./ansible_collections/junipernetworks/junos/plugins/action/system.py +./ansible_collections/junipernetworks/junos/plugins/action/user.py +./ansible_collections/junipernetworks/junos/plugins/action/vlans.py +./ansible_collections/junipernetworks/junos/plugins/action/vrf.py ./ansible_collections/junipernetworks/junos/plugins/cliconf/__init__.py ./ansible_collections/junipernetworks/junos/plugins/cliconf/junos.py ./ansible_collections/junipernetworks/junos/plugins/doc_fragments/__init__.py @@ -14771,7 +15593,6 @@ tags.yaml ./ansible_collections/junipernetworks/junos/plugins/modules/junos_lag_interfaces.py ./ansible_collections/junipernetworks/junos/plugins/modules/junos_lldp_global.py ./ansible_collections/junipernetworks/junos/plugins/modules/junos_lldp_interfaces.py -./ansible_collections/junipernetworks/junos/plugins/modules/junos_logging.py ./ansible_collections/junipernetworks/junos/plugins/modules/junos_logging_global.py ./ansible_collections/junipernetworks/junos/plugins/modules/junos_netconf.py ./ansible_collections/junipernetworks/junos/plugins/modules/junos_ntp_global.py @@ -14798,6 +15619,759 @@ tags.yaml ./ansible_collections/junipernetworks/junos/plugins/netconf/junos.py ./ansible_collections/junipernetworks/junos/plugins/terminal/__init__.py ./ansible_collections/junipernetworks/junos/plugins/terminal/junos.py +./ansible_collections/kaytus/ksmanage/CHANGELOG.rst +./ansible_collections/kaytus/ksmanage/CODE_OF_CONDUCT.md +./ansible_collections/kaytus/ksmanage/FILES.json +./ansible_collections/kaytus/ksmanage/LICENSE +./ansible_collections/kaytus/ksmanage/MANIFEST.json +./ansible_collections/kaytus/ksmanage/README.md +./ansible_collections/kaytus/ksmanage/requirements.txt +./ansible_collections/kaytus/ksmanage/changelogs/.plugin-cache.yaml +./ansible_collections/kaytus/ksmanage/changelogs/changelog.yaml +./ansible_collections/kaytus/ksmanage/changelogs/config.yaml +./ansible_collections/kaytus/ksmanage/changelogs/fragments/.keep +./ansible_collections/kaytus/ksmanage/meta/runtime.yml +./ansible_collections/kaytus/ksmanage/plugins/doc_fragments/ksmanage.py +./ansible_collections/kaytus/ksmanage/plugins/module_utils/ksmanage.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ad_group.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ad_group_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ad_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/adapter_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/add_ldisk.py +./ansible_collections/kaytus/ksmanage/plugins/modules/alert_policy_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/audit_log_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/auto_capture_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/backplane_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/backup.py +./ansible_collections/kaytus/ksmanage/plugins/modules/bios_export.py +./ansible_collections/kaytus/ksmanage/plugins/modules/bios_import.py +./ansible_collections/kaytus/ksmanage/plugins/modules/bios_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/bmc_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/boot_image_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/boot_option_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/clear_audit_log.py +./ansible_collections/kaytus/ksmanage/plugins/modules/clear_event_log.py +./ansible_collections/kaytus/ksmanage/plugins/modules/clear_system_log.py +./ansible_collections/kaytus/ksmanage/plugins/modules/collect_blackbox.py +./ansible_collections/kaytus/ksmanage/plugins/modules/collect_log.py +./ansible_collections/kaytus/ksmanage/plugins/modules/connect_media_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/cpu_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/del_session.py +./ansible_collections/kaytus/ksmanage/plugins/modules/dns_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/download_auto_screenshot.py +./ansible_collections/kaytus/ksmanage/plugins/modules/download_manual_screenshot.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_ad.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_alert_policy.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_auto_capture.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_bios.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_image.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_option.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_connect_media.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_dns.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_event_log_policy.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_fan.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_fru.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv4.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv6.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_kvm.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldap.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldisk.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_log_setting.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_m6_log_setting.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_manual_capture.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_media_instance.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_ncsi.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_network.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_bond.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_link.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_ntp.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_pdisk.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_budget.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_restore.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_status.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_preserve_config.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_config.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_peak.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_restore_factory_default.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_service.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_com.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_dest.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp_trap.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_threshold.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_uid.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_virtual_media.py +./ansible_collections/kaytus/ksmanage/plugins/modules/edit_vlan.py +./ansible_collections/kaytus/ksmanage/plugins/modules/event_log_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/event_log_policy_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/fan_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/fru_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/fw_version_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/gpu_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/hard_disk_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/hba_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/kvm_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ldap_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ldisk_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/log_setting_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/media_instance_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/mem_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ncsi_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/network_bond_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/network_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/network_link_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/ntp_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/onboard_disk_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/pcie_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/pdisk_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/power_budget_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/power_consumption_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/power_restore_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/power_status_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/preserve_config_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/psu_config_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/psu_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/psu_peak_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/raid_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/reset_bmc.py +./ansible_collections/kaytus/ksmanage/plugins/modules/reset_kvm.py +./ansible_collections/kaytus/ksmanage/plugins/modules/restore.py +./ansible_collections/kaytus/ksmanage/plugins/modules/self_test_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/sensor_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/server_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/service_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/session_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/smtp_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/snmp_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/snmp_trap_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/support_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/system_log_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/temp_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/threshold_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/uid_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/update_cpld.py +./ansible_collections/kaytus/ksmanage/plugins/modules/update_fw.py +./ansible_collections/kaytus/ksmanage/plugins/modules/update_psu.py +./ansible_collections/kaytus/ksmanage/plugins/modules/user.py +./ansible_collections/kaytus/ksmanage/plugins/modules/user_group.py +./ansible_collections/kaytus/ksmanage/plugins/modules/user_group_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/user_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/virtual_media_info.py +./ansible_collections/kaytus/ksmanage/plugins/modules/volt_info.py +./ansible_collections/kaytus/ksmanage/venv/.gitignore +./ansible_collections/kaytus/ksmanage/venv/pyvenv.cfg +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_virtualenv.pth +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_virtualenv.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/distutils-precedence.pth +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.virtualenv +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.virtualenv +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.virtualenv +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_distutils_hack/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_distutils_hack/override.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/__main__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/py.typed +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/INSTALLER +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/LICENSE.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/METADATA +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/RECORD +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/WHEEL +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/entry_points.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/top_level.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/build_env.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cache.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/configuration.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/exceptions.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/main.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/pyproject.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/wheel_builder.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/base_command.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/command_context.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/main.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/parser.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/req_command.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/spinners.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/cache.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/check.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/completion.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/configuration.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/debug.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/download.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/freeze.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/hash.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/help.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/install.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/list.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/search.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/show.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/installed.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/collector.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/package_finder.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/sources.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/_distutils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/metadata/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/metadata/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/candidate.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/direct_url.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/format_control.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/index.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/link.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/scheme.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/search_scope.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/target_python.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/auth.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/cache.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/download.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/session.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/check.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/freeze.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/prepare.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/constructors.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_file.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_install.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_set.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_tracker.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/datetime.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/encoding.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/glibc.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/hashes.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/logging.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/misc.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/models.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/packaging.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/parallel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/urls.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/git.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/appdirs.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distro.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pyparsing.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/six.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/vendor.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/core.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/enums.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/win32.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/database.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/index.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/locators.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/markers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/codec.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/core.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/build.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/check.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/meta.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/bar.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/counter.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/spinner.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/api.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/auth.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/certs.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/help.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/models.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/packages.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/structures.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/after.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/before.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/nap.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/retry.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/stop.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/wait.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/decoder.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/encoder.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/ordered.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/tz.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/extern/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_deprecation_warning.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_imp.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/archive_util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/build_meta.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/cli-32.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/cli-64.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/cli.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/config.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/dep_util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/depends.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/dist.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/errors.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/extension.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/glob.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/gui-32.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/gui-64.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/gui.exe +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/installer.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/launch.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/lib2to3_ex.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/monkey.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/msvc.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/namespaces.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/package_index.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/py34compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/sandbox.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/script (dev).tmpl +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/script.tmpl +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/ssl_support.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/unicode_utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/windows_support.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/INSTALLER +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/LICENSE +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/METADATA +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/RECORD +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/WHEEL +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/dependency_links.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/entry_points.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/top_level.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/archive_util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/cmd.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/config.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/core.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/debug.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/dep_util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/dir_util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/dist.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/errors.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/extension.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/file_util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/filelist.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/log.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/py35compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/py38compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/spawn.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/text_file.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/check.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/clean.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/config.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/register.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/upload.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/alias.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/bdist_egg.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/bdist_rpm.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/build_clib.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/build_ext.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/build_py.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/develop.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/dist_info.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/easy_install.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/egg_info.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install_egg_info.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install_lib.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install_scripts.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/launcher manifest.xml +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/py36compat.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/register.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/rotate.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/saveopts.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/sdist.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/setopt.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/test.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/upload.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/upload_docs.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/extern/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/__main__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/bdist_wheel.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/macosx_libfile.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/metadata.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/pkginfo.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/util.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/wheelfile.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/INSTALLER +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/LICENSE.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/METADATA +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/RECORD +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/WHEEL +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/entry_points.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/top_level.txt +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/convert.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/pack.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/unpack.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/packaging/__init__.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/packaging/_typing.py +./ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/packaging/tags.py +./ansible_collections/kaytus/ksmanage/venv/Scripts/activate +./ansible_collections/kaytus/ksmanage/venv/Scripts/activate.bat +./ansible_collections/kaytus/ksmanage/venv/Scripts/activate.fish +./ansible_collections/kaytus/ksmanage/venv/Scripts/activate.ps1 +./ansible_collections/kaytus/ksmanage/venv/Scripts/activate.xsh +./ansible_collections/kaytus/ksmanage/venv/Scripts/activate_this.py +./ansible_collections/kaytus/ksmanage/venv/Scripts/deactivate.bat +./ansible_collections/kaytus/ksmanage/venv/Scripts/pip-3.7.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/pip.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/pip3.7.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/pip3.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/pydoc.bat +./ansible_collections/kaytus/ksmanage/venv/Scripts/python.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/pythonw.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/wheel-3.7.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/wheel.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/wheel3.7.exe +./ansible_collections/kaytus/ksmanage/venv/Scripts/wheel3.exe ./ansible_collections/kubernetes/core/CHANGELOG.rst ./ansible_collections/kubernetes/core/CONTRIBUTING.md ./ansible_collections/kubernetes/core/FILES.json @@ -14826,11 +16400,11 @@ tags.yaml ./ansible_collections/kubernetes/core/plugins/action/k8s_drain.py ./ansible_collections/kubernetes/core/plugins/action/k8s_exec.py ./ansible_collections/kubernetes/core/plugins/action/k8s_info.py +./ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py ./ansible_collections/kubernetes/core/plugins/action/k8s_log.py ./ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py ./ansible_collections/kubernetes/core/plugins/action/k8s_scale.py ./ansible_collections/kubernetes/core/plugins/action/k8s_service.py -./ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py ./ansible_collections/kubernetes/core/plugins/connection/kubectl.py ./ansible_collections/kubernetes/core/plugins/doc_fragments/__init__.py ./ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py @@ -15026,68 +16600,6 @@ tags.yaml ./ansible_collections/microsoft/ad/plugins/plugin_utils/_ldap/client.py ./ansible_collections/microsoft/ad/plugins/plugin_utils/_ldap/laps.py ./ansible_collections/microsoft/ad/plugins/plugin_utils/_ldap/schema.py -./ansible_collections/netapp/aws/CHANGELOG.rst -./ansible_collections/netapp/aws/COPYING -./ansible_collections/netapp/aws/FILES.json -./ansible_collections/netapp/aws/MANIFEST.json -./ansible_collections/netapp/aws/README.md -./ansible_collections/netapp/aws/requirements.txt -./ansible_collections/netapp/aws/changelogs/changelog.yaml -./ansible_collections/netapp/aws/changelogs/config.yaml -./ansible_collections/netapp/aws/changelogs/fragments/20.2.0.yaml -./ansible_collections/netapp/aws/changelogs/fragments/20.6.0.yaml -./ansible_collections/netapp/aws/changelogs/fragments/20.8.0.yaml -./ansible_collections/netapp/aws/changelogs/fragments/20.9.0.yaml -./ansible_collections/netapp/aws/changelogs/fragments/2019.10.0.yaml -./ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3569.yaml -./ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3644.yaml -./ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-4416.yaml -./ansible_collections/netapp/aws/meta/execution-environment.yml -./ansible_collections/netapp/aws/meta/runtime.yml -./ansible_collections/netapp/aws/plugins/doc_fragments/netapp.py -./ansible_collections/netapp/aws/plugins/module_utils/netapp.py -./ansible_collections/netapp/aws/plugins/module_utils/netapp_module.py -./ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_active_directory.py -./ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_filesystems.py -./ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_pool.py -./ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_snapshots.py -./ansible_collections/netapp/azure/CHANGELOG.rst -./ansible_collections/netapp/azure/COPYING -./ansible_collections/netapp/azure/FILES.json -./ansible_collections/netapp/azure/HACK.md -./ansible_collections/netapp/azure/MANIFEST.json -./ansible_collections/netapp/azure/README.md -./ansible_collections/netapp/azure/requirements.txt -./ansible_collections/netapp/azure/changelogs/changelog.yaml -./ansible_collections/netapp/azure/changelogs/config.yaml -./ansible_collections/netapp/azure/changelogs/fragments/20.2.0.yaml -./ansible_collections/netapp/azure/changelogs/fragments/20.4.0.yaml -./ansible_collections/netapp/azure/changelogs/fragments/20.5.0.yaml -./ansible_collections/netapp/azure/changelogs/fragments/20.6.0.yaml -./ansible_collections/netapp/azure/changelogs/fragments/20.7.0.yaml -./ansible_collections/netapp/azure/changelogs/fragments/20.8.0.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3505.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3526.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3663.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3704.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3849.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3935.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3949.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4001.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4070.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4135.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4246.yaml -./ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4416.yaml -./ansible_collections/netapp/azure/meta/runtime.yml -./ansible_collections/netapp/azure/plugins/doc_fragments/azure.py -./ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py -./ansible_collections/netapp/azure/plugins/doc_fragments/netapp.py -./ansible_collections/netapp/azure/plugins/module_utils/azure_rm_netapp_common.py -./ansible_collections/netapp/azure/plugins/module_utils/netapp_module.py -./ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_account.py -./ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_capacity_pool.py -./ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_snapshot.py -./ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_volume.py ./ansible_collections/netapp/cloudmanager/CHANGELOG.rst ./ansible_collections/netapp/cloudmanager/COPYING ./ansible_collections/netapp/cloudmanager/FILES.json @@ -15185,59 +16697,6 @@ tags.yaml ./ansible_collections/netapp/cloudmanager/plugins/modules/na_cloudmanager_nss_account.py ./ansible_collections/netapp/cloudmanager/plugins/modules/na_cloudmanager_snapmirror.py ./ansible_collections/netapp/cloudmanager/plugins/modules/na_cloudmanager_volume.py -./ansible_collections/netapp/elementsw/CHANGELOG.rst -./ansible_collections/netapp/elementsw/FILES.json -./ansible_collections/netapp/elementsw/MANIFEST.json -./ansible_collections/netapp/elementsw/README.md -./ansible_collections/netapp/elementsw/requirements.txt -./ansible_collections/netapp/elementsw/changelogs/changelog.yaml -./ansible_collections/netapp/elementsw/changelogs/config.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/20.2.0.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/20.6.0.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/20.8.0.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/20.9.0.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/2019.10.0.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3117.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3174.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3188.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3196.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3235.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3310.yml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3324.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3731.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3733.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3734.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3800.yaml -./ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-4416.yaml -./ansible_collections/netapp/elementsw/meta/runtime.yml -./ansible_collections/netapp/elementsw/plugins/doc_fragments/netapp.py -./ansible_collections/netapp/elementsw/plugins/module_utils/netapp.py -./ansible_collections/netapp/elementsw/plugins/module_utils/netapp_elementsw_module.py -./ansible_collections/netapp/elementsw/plugins/module_utils/netapp_module.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group_volumes.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_account.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_admin_users.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_backup.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_check_connections.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_config.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_pair.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_snmp.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_drive.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_info.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_initiators.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_ldap.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_network_interfaces.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_node.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_qos_policy.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_restore.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_schedule.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_vlan.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_clone.py -./ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_pair.py ./ansible_collections/netapp/ontap/CHANGELOG.rst ./ansible_collections/netapp/ontap/COPYING ./ansible_collections/netapp/ontap/FILES.json @@ -16049,37 +17508,6 @@ tags.yaml ./ansible_collections/netapp/storagegrid/plugins/modules/na_sg_org_info.py ./ansible_collections/netapp/storagegrid/plugins/modules/na_sg_org_user.py ./ansible_collections/netapp/storagegrid/plugins/modules/na_sg_org_user_s3_key.py -./ansible_collections/netapp/um_info/CHANGELOG.rst -./ansible_collections/netapp/um_info/COPYING -./ansible_collections/netapp/um_info/FILES.json -./ansible_collections/netapp/um_info/MANIFEST.json -./ansible_collections/netapp/um_info/README.md -./ansible_collections/netapp/um_info/metadata-29PbAy.json -./ansible_collections/netapp/um_info/requirements.txt -./ansible_collections/netapp/um_info/changelogs/changelog.yaml -./ansible_collections/netapp/um_info/changelogs/config.yaml -./ansible_collections/netapp/um_info/changelogs/fragments/20.7.0.yaml -./ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-2952.yaml -./ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3920.yaml -./ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3962.yaml -./ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4059.yaml -./ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4087.yaml -./ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4416.yaml -./ansible_collections/netapp/um_info/meta/execution-environment.yml -./ansible_collections/netapp/um_info/meta/runtime.yml -./ansible_collections/netapp/um_info/plugins/doc_fragments/netapp.py -./ansible_collections/netapp/um_info/plugins/module_utils/netapp.py -./ansible_collections/netapp/um_info/plugins/module_utils/netapp_module.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_aggregates_info.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_clusters_info.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_list_aggregates.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_list_clusters.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_list_nodes.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_list_svms.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_list_volumes.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_nodes_info.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_svms_info.py -./ansible_collections/netapp/um_info/plugins/modules/na_um_volumes_info.py ./ansible_collections/netapp_eseries/santricity/CHANGELOG.rst ./ansible_collections/netapp_eseries/santricity/CONTRIBUTING.md ./ansible_collections/netapp_eseries/santricity/COPYING @@ -16265,6 +17693,7 @@ tags.yaml ./ansible_collections/netbox/netbox/plugins/modules/netbox_contact_group.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_contact_role.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field.py +./ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field_choice_set.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_custom_link.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_device.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_device_bay.py @@ -16287,6 +17716,8 @@ tags.yaml ./ansible_collections/netbox/netbox/plugins/modules/netbox_l2vpn_termination.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_location.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_manufacturer.py +./ansible_collections/netbox/netbox/plugins/modules/netbox_module.py +./ansible_collections/netbox/netbox/plugins/modules/netbox_module_bay.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_module_type.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_platform.py ./ansible_collections/netbox/netbox/plugins/modules/netbox_power_feed.py @@ -16934,8 +18365,6 @@ tags.yaml ./ansible_collections/purestorage/flasharray/requirements.txt ./ansible_collections/purestorage/flasharray/settings.json ./ansible_collections/purestorage/flasharray/changelogs/.plugin-cache.yaml -./ansible_collections/purestorage/flasharray/changelogs/210_add_rename_hgroup.yaml -./ansible_collections/purestorage/flasharray/changelogs/211_fix_clearing_host_inititators.yaml ./ansible_collections/purestorage/flasharray/changelogs/changelog.yaml ./ansible_collections/purestorage/flasharray/changelogs/config.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/107_host_case_clarity.yaml @@ -16996,6 +18425,8 @@ tags.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/206_add_naa_info.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/207_fix_disable_for_remote_assist.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/208_add_directory_quota_support.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/210_add_rename_hgroup.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/211_fix_clearing_host_inititators.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/213_add_kmip.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/214_join_ou.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/220_capacity_info.yaml @@ -17148,6 +18579,13 @@ tags.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/545_4kcert.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/547_lacp_neighbor_info.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/548_uptime.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/550_service.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/555_update_pg.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/558_add_perf_info.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/559_volume_response.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/560_snapshot_epoch.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/561_remote_snap_info.yaml +./ansible_collections/purestorage/flasharray/changelogs/fragments/562_host_vol_fix.yaml ./ansible_collections/purestorage/flasharray/changelogs/fragments/v1.4.0_summary.yaml ./ansible_collections/purestorage/flasharray/meta/execution-environment.yml ./ansible_collections/purestorage/flasharray/meta/runtime.yml @@ -17397,77 +18835,6 @@ tags.yaml ./ansible_collections/purestorage/flashblade/plugins/modules/purefb_userquota.py ./ansible_collections/purestorage/flashblade/plugins/modules/purefb_virtualhost.py ./ansible_collections/purestorage/flashblade/roles/.keep -./ansible_collections/purestorage/fusion/CHANGELOG.rst -./ansible_collections/purestorage/fusion/COPYING.GPLv3 -./ansible_collections/purestorage/fusion/FILES.json -./ansible_collections/purestorage/fusion/MANIFEST.json -./ansible_collections/purestorage/fusion/README.md -./ansible_collections/purestorage/fusion/changelogs/.plugin-cache.yaml -./ansible_collections/purestorage/fusion/changelogs/changelog.yaml -./ansible_collections/purestorage/fusion/changelogs/config.yaml -./ansible_collections/purestorage/fusion/meta/runtime.yml -./ansible_collections/purestorage/fusion/playbooks/simple/create_array.yml -./ansible_collections/purestorage/fusion/playbooks/simple/create_availability_zone.yml -./ansible_collections/purestorage/fusion/playbooks/simple/create_tenant_space.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_all.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_api_clients.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_arrays.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_availability_zones.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_hardware_types.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_hosts.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_interfaces.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_network_interface_groups.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_placement_groups.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_protection_policies.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_roles.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_snapshots.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_storage_classes.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_storage_endpoints.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_storage_services.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_tenant_spaces.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_tenants.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_users.yml -./ansible_collections/purestorage/fusion/playbooks/simple/list_volumes.yml -./ansible_collections/purestorage/fusion/playbooks/simple/make_tenant_admin.yml -./ansible_collections/purestorage/fusion/playbooks/simple/remove_array.yml -./ansible_collections/purestorage/fusion/playbooks/simple/setup_infrastructure.yml -./ansible_collections/purestorage/fusion/playbooks/simple/setup_protection_policies.yml -./ansible_collections/purestorage/fusion/playbooks/simple/setup_storage_service_class.yml -./ansible_collections/purestorage/fusion/playbooks/simple/setup_workloads.yml -./ansible_collections/purestorage/fusion/playbooks/tasks/.keep -./ansible_collections/purestorage/fusion/playbooks/templates/.keep -./ansible_collections/purestorage/fusion/playbooks/vars/.keep -./ansible_collections/purestorage/fusion/plugins/doc_fragments/purestorage.py -./ansible_collections/purestorage/fusion/plugins/inventory/__init__.py -./ansible_collections/purestorage/fusion/plugins/module_utils/errors.py -./ansible_collections/purestorage/fusion/plugins/module_utils/fusion.py -./ansible_collections/purestorage/fusion/plugins/module_utils/getters.py -./ansible_collections/purestorage/fusion/plugins/module_utils/networking.py -./ansible_collections/purestorage/fusion/plugins/module_utils/operations.py -./ansible_collections/purestorage/fusion/plugins/module_utils/parsing.py -./ansible_collections/purestorage/fusion/plugins/module_utils/prerequisites.py -./ansible_collections/purestorage/fusion/plugins/module_utils/snapshots.py -./ansible_collections/purestorage/fusion/plugins/module_utils/startup.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_api_client.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_array.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_az.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_hap.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_hw.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_info.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_ni.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_nig.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_pg.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_pp.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_ra.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_region.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_sc.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_se.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_ss.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_tenant.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_tn.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_ts.py -./ansible_collections/purestorage/fusion/plugins/modules/fusion_volume.py -./ansible_collections/purestorage/fusion/test/config.yaml ./ansible_collections/sensu/sensu_go/CODE_OF_CONDUCT.md ./ansible_collections/sensu/sensu_go/COPYING ./ansible_collections/sensu/sensu_go/FILES.json @@ -17893,6 +19260,7 @@ tags.yaml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/README.md ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/defaults/main.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/handlers/main.yml +./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/argument_specs.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/main.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command_template.yml @@ -17910,6 +19278,7 @@ tags.yaml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_serviceset.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_timeperiod.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user.yml +./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_group.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml ./ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/main.yml @@ -17987,6 +19356,7 @@ tags.yaml ./ansible_collections/theforeman/foreman/plugins/modules/puppetclasses_import.py ./ansible_collections/theforeman/foreman/plugins/modules/realm.py ./ansible_collections/theforeman/foreman/plugins/modules/redhat_manifest.py +./ansible_collections/theforeman/foreman/plugins/modules/registration_command.py ./ansible_collections/theforeman/foreman/plugins/modules/repository.py ./ansible_collections/theforeman/foreman/plugins/modules/repository_info.py ./ansible_collections/theforeman/foreman/plugins/modules/repository_set.py @@ -18015,6 +19385,7 @@ tags.yaml ./ansible_collections/theforeman/foreman/plugins/modules/user.py ./ansible_collections/theforeman/foreman/plugins/modules/usergroup.py ./ansible_collections/theforeman/foreman/plugins/modules/wait_for_task.py +./ansible_collections/theforeman/foreman/plugins/modules/webhook.py ./ansible_collections/theforeman/foreman/roles/activation_keys/README.md ./ansible_collections/theforeman/foreman/roles/activation_keys/tasks/main.yml ./ansible_collections/theforeman/foreman/roles/auth_sources_ldap/README.md @@ -18077,6 +19448,7 @@ tags.yaml ./ansible_collections/vmware/vmware_rest/README.md ./ansible_collections/vmware/vmware_rest/bindep.txt ./ansible_collections/vmware/vmware_rest/dev.md +./ansible_collections/vmware/vmware_rest/development.md ./ansible_collections/vmware/vmware_rest/docs-requirements.txt ./ansible_collections/vmware/vmware_rest/modules.yaml ./ansible_collections/vmware/vmware_rest/requirements.txt @@ -18084,16 +19456,7 @@ tags.yaml ./ansible_collections/vmware/vmware_rest/tox.ini ./ansible_collections/vmware/vmware_rest/changelogs/changelog.yaml ./ansible_collections/vmware/vmware_rest/changelogs/config.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-changelog.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-module_utils.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/allow_space_in_search_filters.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/cloud.common-bump.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/lookup-handle-special-chars.yml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/set_default_galaxy_version.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/vcenter_network_info-dvs-example.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/version_added.yaml -./ansible_collections/vmware/vmware_rest/changelogs/fragments/vm_template_library.yaml +./ansible_collections/vmware/vmware_rest/changelogs/fragments/.keep ./ansible_collections/vmware/vmware_rest/manual/source/.rstcheck.cfg ./ansible_collections/vmware/vmware_rest/manual/source/Makefile ./ansible_collections/vmware/vmware_rest/manual/source/conf.py @@ -18839,14 +20202,17 @@ ansible_collections/amazon/aws/plugins/modules/lambda_layer_info.py ansible_collections/amazon/aws/plugins/modules/lambda_policy.py ansible_collections/amazon/aws/plugins/modules/rds_cluster.py ansible_collections/amazon/aws/plugins/modules/rds_cluster_info.py +ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group.py +ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group_info.py ansible_collections/amazon/aws/plugins/modules/rds_cluster_snapshot.py +ansible_collections/amazon/aws/plugins/modules/rds_engine_versions_info.py ansible_collections/amazon/aws/plugins/modules/rds_global_cluster_info.py ansible_collections/amazon/aws/plugins/modules/rds_instance.py ansible_collections/amazon/aws/plugins/modules/rds_instance_info.py +ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py ansible_collections/amazon/aws/plugins/modules/rds_instance_snapshot.py ansible_collections/amazon/aws/plugins/modules/rds_option_group.py ansible_collections/amazon/aws/plugins/modules/rds_option_group_info.py -ansible_collections/amazon/aws/plugins/modules/rds_param_group.py ansible_collections/amazon/aws/plugins/modules/rds_snapshot_info.py ansible_collections/amazon/aws/plugins/modules/rds_subnet_group.py ansible_collections/amazon/aws/plugins/modules/route53.py @@ -19145,6 +20511,8 @@ ansible_collections/amazon/aws/tests/integration/targets/ec2_vpc_subnet/meta/mai ansible_collections/amazon/aws/tests/integration/targets/ec2_vpc_subnet/tasks/main.yml ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/aliases ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/defaults/main.yml +ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/meta/main.yml +ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/alb_with_multiple_listener_certs.yml ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/main.yml ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/templates/policy.json ansible_collections/amazon/aws/tests/integration/targets/elb_classic_lb/aliases @@ -19199,6 +20567,7 @@ ansible_collections/amazon/aws/tests/integration/targets/iam_instance_profile/ta ansible_collections/amazon/aws/tests/integration/targets/iam_instance_profile/tasks/tags.yml ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/aliases ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/defaults/main.yml +ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/files/deny-assume.json ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/meta/main.yml ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/tasks/main.yml ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/tasks/tags.yml @@ -19417,6 +20786,9 @@ ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_multi_az/al ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_multi_az/defaults/main.yml ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_multi_az/meta/main.yml ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_multi_az/tasks/main.yml +ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/aliases +ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/defaults/main.yaml +ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/tasks/main.yaml ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_promote/aliases ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_promote/defaults/main.yml ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_promote/tasks/main.yaml @@ -19540,7 +20912,9 @@ ansible_collections/amazon/aws/tests/integration/targets/s3_object/aliases ansible_collections/amazon/aws/tests/integration/targets/s3_object/defaults/main.yml ansible_collections/amazon/aws/tests/integration/targets/s3_object/files/hello.txt ansible_collections/amazon/aws/tests/integration/targets/s3_object/files/test.png +ansible_collections/amazon/aws/tests/integration/targets/s3_object/library/test_s3_upload_multipart.py ansible_collections/amazon/aws/tests/integration/targets/s3_object/meta/main.yml +ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_multipart_upload.yml ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_object.yml ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_object_acl_disabled_bucket.yml ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_recursively.yml @@ -19585,6 +20959,7 @@ ansible_collections/amazon/aws/tests/sanity/ignore-2.14.txt ansible_collections/amazon/aws/tests/sanity/ignore-2.15.txt ansible_collections/amazon/aws/tests/sanity/ignore-2.16.txt ansible_collections/amazon/aws/tests/sanity/ignore-2.17.txt +ansible_collections/amazon/aws/tests/sanity/ignore-2.18.txt ansible_collections/amazon/aws/tests/unit/__init__.py ansible_collections/amazon/aws/tests/unit/constraints.txt ansible_collections/amazon/aws/tests/unit/requirements.txt @@ -19639,7 +21014,6 @@ ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_canonicalize. ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_compare_policies.py ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_py3cmp.py ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_simple_hashable_policy.py -ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_sort_json_policy_dict.py ansible_collections/amazon/aws/tests/unit/module_utils/retries/__init__.py ansible_collections/amazon/aws/tests/unit/module_utils/retries/test_awsretry.py ansible_collections/amazon/aws/tests/unit/module_utils/retries/test_botocore_exception_maybe.py @@ -19681,6 +21055,7 @@ ansible_collections/amazon/aws/tests/unit/plugins/modules/test_ec2_security_grou ansible_collections/amazon/aws/tests/unit/plugins/modules/test_ec2_snapshot_info.py ansible_collections/amazon/aws/tests/unit/plugins/modules/test_ec2_vpc_dhcp_option.py ansible_collections/amazon/aws/tests/unit/plugins/modules/test_kms_key.py +ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_event.py ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_layer.py ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_layer_info.py ansible_collections/amazon/aws/tests/unit/plugins/modules/test_rds_instance_info.py @@ -19792,12 +21167,11 @@ ansible_collections/ansible/netcommon/codecov.yml ansible_collections/ansible/netcommon/pyproject.toml ansible_collections/ansible/netcommon/requirements.txt ansible_collections/ansible/netcommon/test-requirements.txt -ansible_collections/ansible/netcommon/tox.ini +ansible_collections/ansible/netcommon/tox-ansible.ini ansible_collections/ansible/netcommon/.github/release-drafter.yml -ansible_collections/ansible/netcommon/.github/workflows/ack.yml +ansible_collections/ansible/netcommon/.github/workflows/check_label.yml ansible_collections/ansible/netcommon/.github/workflows/codecoverage.yml -ansible_collections/ansible/netcommon/.github/workflows/lint.yml -ansible_collections/ansible/netcommon/.github/workflows/push.yml +ansible_collections/ansible/netcommon/.github/workflows/draft_release.yml ansible_collections/ansible/netcommon/.github/workflows/release.yml ansible_collections/ansible/netcommon/.github/workflows/tests.yml ansible_collections/ansible/netcommon/.github/workflows/token_refresh.yml @@ -19811,6 +21185,7 @@ ansible_collections/ansible/netcommon/changelogs/fragments/.keep ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_backup_module.rst ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_command_module.rst ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_config_module.rst +ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_restore_module.rst ansible_collections/ansible/netcommon/docs/ansible.netcommon.comp_type5_filter.rst ansible_collections/ansible/netcommon/docs/ansible.netcommon.default_cliconf.rst ansible_collections/ansible/netcommon/docs/ansible.netcommon.default_netconf.rst @@ -19894,6 +21269,7 @@ ansible_collections/ansible/netcommon/plugins/module_utils/utils/data.py ansible_collections/ansible/netcommon/plugins/modules/cli_backup.py ansible_collections/ansible/netcommon/plugins/modules/cli_command.py ansible_collections/ansible/netcommon/plugins/modules/cli_config.py +ansible_collections/ansible/netcommon/plugins/modules/cli_restore.py ansible_collections/ansible/netcommon/plugins/modules/grpc_config.py ansible_collections/ansible/netcommon/plugins/modules/grpc_get.py ansible_collections/ansible/netcommon/plugins/modules/net_get.py @@ -19929,6 +21305,7 @@ ansible_collections/ansible/netcommon/plugins/sub_plugins/cli_parser/ntc_templat ansible_collections/ansible/netcommon/plugins/sub_plugins/cli_parser/pyats_parser.py ansible_collections/ansible/netcommon/plugins/sub_plugins/grpc/base.py ansible_collections/ansible/netcommon/tests/.gitignore +ansible_collections/ansible/netcommon/tests/config.yml ansible_collections/ansible/netcommon/tests/integration/target-prefixes.network ansible_collections/ansible/netcommon/tests/integration/targets/cli_parse/tasks/centos_native.yaml ansible_collections/ansible/netcommon/tests/integration/targets/cli_parse/tasks/fedora_native.yaml @@ -20005,13 +21382,11 @@ ansible_collections/ansible/netcommon/tests/integration/targets/restconf_get/met ansible_collections/ansible/netcommon/tests/integration/targets/restconf_get/tasks/main.yaml ansible_collections/ansible/netcommon/tests/integration/targets/restconf_get/tasks/restconf.yaml ansible_collections/ansible/netcommon/tests/integration/targets/restconf_get/tests/iosxe/basic.yaml -ansible_collections/ansible/netcommon/tests/sanity/ignore-2.12.txt -ansible_collections/ansible/netcommon/tests/sanity/ignore-2.13.txt ansible_collections/ansible/netcommon/tests/sanity/ignore-2.14.txt ansible_collections/ansible/netcommon/tests/sanity/ignore-2.15.txt ansible_collections/ansible/netcommon/tests/sanity/ignore-2.16.txt ansible_collections/ansible/netcommon/tests/sanity/ignore-2.17.txt -ansible_collections/ansible/netcommon/tests/sanity/ignore-2.9.txt +ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt ansible_collections/ansible/netcommon/tests/unit/__init__.py ansible_collections/ansible/netcommon/tests/unit/requirements.txt ansible_collections/ansible/netcommon/tests/unit/mock/__init__.py @@ -20290,7 +21665,7 @@ ansible_collections/ansible/posix/tests/utils/shippable/timing.py ansible_collections/ansible/posix/tests/utils/shippable/timing.sh ansible_collections/ansible/posix/tests/utils/shippable/tower.sh ansible_collections/ansible/posix/tests/utils/shippable/units.sh -ansible_collections/ansible/utils/.darglint +ansible_collections/ansible/utils/.ansible-lint ansible_collections/ansible/utils/.flake8 ansible_collections/ansible/utils/.gitignore ansible_collections/ansible/utils/.isort.cfg @@ -20305,18 +21680,16 @@ ansible_collections/ansible/utils/README.md ansible_collections/ansible/utils/bindep.txt ansible_collections/ansible/utils/codecov.yml ansible_collections/ansible/utils/cspell.config.yaml -ansible_collections/ansible/utils/mypy.ini ansible_collections/ansible/utils/pyproject.toml ansible_collections/ansible/utils/requirements.txt ansible_collections/ansible/utils/test-requirements.txt ansible_collections/ansible/utils/tox-ansible.ini -ansible_collections/ansible/utils/tox.ini ansible_collections/ansible/utils/.config/ansible-lint.yaml ansible_collections/ansible/utils/.config/dictionary.txt ansible_collections/ansible/utils/.github/release-drafter.yml -ansible_collections/ansible/utils/.github/workflows/ack.yml +ansible_collections/ansible/utils/.github/workflows/check_label.yml ansible_collections/ansible/utils/.github/workflows/codecoverage.yml -ansible_collections/ansible/utils/.github/workflows/push.yml +ansible_collections/ansible/utils/.github/workflows/draft_release.yml ansible_collections/ansible/utils/.github/workflows/release.yml ansible_collections/ansible/utils/.github/workflows/tests.yml ansible_collections/ansible/utils/.github/workflows/token_refresh.yml @@ -20486,6 +21859,7 @@ ansible_collections/ansible/utils/plugins/test/subnet_of.py ansible_collections/ansible/utils/plugins/test/supernet_of.py ansible_collections/ansible/utils/plugins/test/unspecified.py ansible_collections/ansible/utils/plugins/test/validate.py +ansible_collections/ansible/utils/tests/config.yml ansible_collections/ansible/utils/tests/integration/requirements.txt ansible_collections/ansible/utils/tests/integration/test_integration.py ansible_collections/ansible/utils/tests/integration/targets/utils_cli_parse/files/nxos_show_interface.txt @@ -20632,9 +22006,6 @@ ansible_collections/ansible/utils/tests/integration/targets/utils_validate/tests ansible_collections/ansible/utils/tests/integration/targets/utils_validate/tests/jsonschema/test.yaml ansible_collections/ansible/utils/tests/integration/targets/utils_validate/vars/main.yaml ansible_collections/ansible/utils/tests/unit/requirements.txt -ansible_collections/ansible/utils/tests/unit/compat/__init__.py -ansible_collections/ansible/utils/tests/unit/compat/mock.py -ansible_collections/ansible/utils/tests/unit/compat/unittest.py ansible_collections/ansible/utils/tests/unit/mock/__init__.py ansible_collections/ansible/utils/tests/unit/mock/loader.py ansible_collections/ansible/utils/tests/unit/mock/path.py @@ -21148,6 +22519,7 @@ ansible_collections/ansible/windows/tests/utils/shippable/shippable.sh ansible_collections/ansible/windows/tests/utils/shippable/units.sh ansible_collections/ansible/windows/tests/utils/shippable/windows.sh ansible_collections/arista/eos/.ansible-lint +ansible_collections/arista/eos/.flake8 ansible_collections/arista/eos/.gitignore ansible_collections/arista/eos/.isort.cfg ansible_collections/arista/eos/.pre-commit-config.yaml @@ -21159,16 +22531,16 @@ ansible_collections/arista/eos/LICENSE ansible_collections/arista/eos/MANIFEST.json ansible_collections/arista/eos/README.md ansible_collections/arista/eos/bindep.txt -ansible_collections/arista/eos/ignore-2.9.txt ansible_collections/arista/eos/pyproject.toml ansible_collections/arista/eos/requirements.txt ansible_collections/arista/eos/test-requirements.txt -ansible_collections/arista/eos/tox.ini +ansible_collections/arista/eos/tox-ansible.ini +ansible_collections/arista/eos/.github/CODEOWNERS ansible_collections/arista/eos/.github/dependabot.yml ansible_collections/arista/eos/.github/release-drafter.yml -ansible_collections/arista/eos/.github/workflows/ack.yml +ansible_collections/arista/eos/.github/workflows/check_label.yml ansible_collections/arista/eos/.github/workflows/codecoverage.yml -ansible_collections/arista/eos/.github/workflows/push.yml +ansible_collections/arista/eos/.github/workflows/draft_release.yml ansible_collections/arista/eos/.github/workflows/release.yml ansible_collections/arista/eos/.github/workflows/tests.yml ansible_collections/arista/eos/.vscode/settings.json @@ -21180,7 +22552,6 @@ ansible_collections/arista/eos/docs/arista.eos.eos_acls_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_banner_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_bgp_address_family_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_bgp_global_module.rst -ansible_collections/arista/eos/docs/arista.eos.eos_bgp_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_cliconf.rst ansible_collections/arista/eos/docs/arista.eos.eos_command_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_config_module.rst @@ -21198,7 +22569,6 @@ ansible_collections/arista/eos/docs/arista.eos.eos_lldp_global_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_lldp_interfaces_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_lldp_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_logging_global_module.rst -ansible_collections/arista/eos/docs/arista.eos.eos_logging_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_ntp_global_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_ospf_interfaces_module.rst ansible_collections/arista/eos/docs/arista.eos.eos_ospfv2_module.rst @@ -21436,7 +22806,6 @@ ansible_collections/arista/eos/plugins/modules/__init__.py ansible_collections/arista/eos/plugins/modules/eos_acl_interfaces.py ansible_collections/arista/eos/plugins/modules/eos_acls.py ansible_collections/arista/eos/plugins/modules/eos_banner.py -ansible_collections/arista/eos/plugins/modules/eos_bgp.py ansible_collections/arista/eos/plugins/modules/eos_bgp_address_family.py ansible_collections/arista/eos/plugins/modules/eos_bgp_global.py ansible_collections/arista/eos/plugins/modules/eos_command.py @@ -21453,7 +22822,6 @@ ansible_collections/arista/eos/plugins/modules/eos_lag_interfaces.py ansible_collections/arista/eos/plugins/modules/eos_lldp.py ansible_collections/arista/eos/plugins/modules/eos_lldp_global.py ansible_collections/arista/eos/plugins/modules/eos_lldp_interfaces.py -ansible_collections/arista/eos/plugins/modules/eos_logging.py ansible_collections/arista/eos/plugins/modules/eos_logging_global.py ansible_collections/arista/eos/plugins/modules/eos_ntp_global.py ansible_collections/arista/eos/plugins/modules/eos_ospf_interfaces.py @@ -21518,11 +22886,6 @@ ansible_collections/arista/eos/tests/integration/targets/eos_banner/tests/cli/ba ansible_collections/arista/eos/tests/integration/targets/eos_banner/tests/cli/basic-motd.yaml ansible_collections/arista/eos/tests/integration/targets/eos_banner/tests/eapi/basic-login.yaml ansible_collections/arista/eos/tests/integration/targets/eos_banner/tests/eapi/basic-motd.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_bgp/defaults/main.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_bgp/meta/main.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/cli.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/main.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tests/cli/basic.yaml ansible_collections/arista/eos/tests/integration/targets/eos_bgp_address_family/defaults/main.yaml ansible_collections/arista/eos/tests/integration/targets/eos_bgp_address_family/meta/main.yaml ansible_collections/arista/eos/tests/integration/targets/eos_bgp_address_family/tasks/cli.yaml @@ -21664,6 +23027,7 @@ ansible_collections/arista/eos/tests/integration/targets/eos_facts/tasks/main.ya ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/all_facts.yaml ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/default_facts.yaml ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/invalid_subset.yaml +ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/network_facts ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/not_hardware.yaml ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/eapi/all_facts.yaml ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/eapi/default_facts.yaml @@ -21825,13 +23189,6 @@ ansible_collections/arista/eos/tests/integration/targets/eos_lldp_interfaces/tes ansible_collections/arista/eos/tests/integration/targets/eos_lldp_interfaces/tests/common/rendered.yaml ansible_collections/arista/eos/tests/integration/targets/eos_lldp_interfaces/tests/common/replaced.yaml ansible_collections/arista/eos/tests/integration/targets/eos_lldp_interfaces/tests/common/rtt.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_logging/defaults/main.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_logging/meta/main.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/cli.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/eapi.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/main.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/cli/basic.yaml -ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/eapi/basic.yaml ansible_collections/arista/eos/tests/integration/targets/eos_logging_global/defaults/main.yaml ansible_collections/arista/eos/tests/integration/targets/eos_logging_global/meta/main.yaml ansible_collections/arista/eos/tests/integration/targets/eos_logging_global/tasks/cli.yaml @@ -22066,12 +23423,10 @@ ansible_collections/arista/eos/tests/sanity/ignore-2.14.txt ansible_collections/arista/eos/tests/sanity/ignore-2.15.txt ansible_collections/arista/eos/tests/sanity/ignore-2.16.txt ansible_collections/arista/eos/tests/sanity/ignore-2.17.txt +ansible_collections/arista/eos/tests/sanity/ignore-2.18.txt ansible_collections/arista/eos/tests/sanity/ignore-2.9.txt ansible_collections/arista/eos/tests/unit/__init__.py ansible_collections/arista/eos/tests/unit/requirements.txt -ansible_collections/arista/eos/tests/unit/compat/__init__.py -ansible_collections/arista/eos/tests/unit/compat/mock.py -ansible_collections/arista/eos/tests/unit/compat/unittest.py ansible_collections/arista/eos/tests/unit/mock/__init__.py ansible_collections/arista/eos/tests/unit/mock/loader.py ansible_collections/arista/eos/tests/unit/mock/path.py @@ -22087,7 +23442,6 @@ ansible_collections/arista/eos/tests/unit/modules/network/eos/eos_module.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acl_interfaces.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acls.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_banner.py -ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_address_family.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_global.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_command.py @@ -22101,7 +23455,6 @@ ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp_interfaces.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lag_interfaces.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lldp_global.py -ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging_global.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ntp_global.py ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospf_interfaces.py @@ -22205,6 +23558,9 @@ ansible_collections/awx/awx/plugins/modules/organization.py ansible_collections/awx/awx/plugins/modules/project.py ansible_collections/awx/awx/plugins/modules/project_update.py ansible_collections/awx/awx/plugins/modules/role.py +ansible_collections/awx/awx/plugins/modules/role_definition.py +ansible_collections/awx/awx/plugins/modules/role_team_assignment.py +ansible_collections/awx/awx/plugins/modules/role_user_assignment.py ansible_collections/awx/awx/plugins/modules/schedule.py ansible_collections/awx/awx/plugins/modules/settings.py ansible_collections/awx/awx/plugins/modules/subscriptions.py @@ -22238,6 +23594,9 @@ ansible_collections/awx/awx/test/awx/test_notification_template.py ansible_collections/awx/awx/test/awx/test_organization.py ansible_collections/awx/awx/test/awx/test_project.py ansible_collections/awx/awx/test/awx/test_role.py +ansible_collections/awx/awx/test/awx/test_role_definition.py +ansible_collections/awx/awx/test/awx/test_role_team_assignment.py +ansible_collections/awx/awx/test/awx/test_role_user_assignment.py ansible_collections/awx/awx/test/awx/test_schedule.py ansible_collections/awx/awx/test/awx/test_settings.py ansible_collections/awx/awx/test/awx/test_team.py @@ -22284,6 +23643,9 @@ ansible_collections/awx/awx/tests/integration/targets/organization/tasks/main.ym ansible_collections/awx/awx/tests/integration/targets/project/tasks/main.yml ansible_collections/awx/awx/tests/integration/targets/project_update/tasks/main.yml ansible_collections/awx/awx/tests/integration/targets/role/tasks/main.yml +ansible_collections/awx/awx/tests/integration/targets/role_definition/tasks/main.yml +ansible_collections/awx/awx/tests/integration/targets/role_team_assignment/tasks/main.yml +ansible_collections/awx/awx/tests/integration/targets/role_user_assignment/tasks/main.yml ansible_collections/awx/awx/tests/integration/targets/schedule/tasks/main.yml ansible_collections/awx/awx/tests/integration/targets/schedule_rrule/tasks/main.yml ansible_collections/awx/awx/tests/integration/targets/settings/tasks/main.yml @@ -22310,13 +23672,6 @@ ansible_collections/azure/azcollection/release-pipelines.yml ansible_collections/azure/azcollection/requirements-azure.txt ansible_collections/azure/azcollection/sanity-requirements-azure.txt ansible_collections/azure/azcollection/shippable.yml -ansible_collections/azure/azcollection/.idea/.gitignore -ansible_collections/azure/azcollection/.idea/azcollection.iml -ansible_collections/azure/azcollection/.idea/misc.xml -ansible_collections/azure/azcollection/.idea/modules.xml -ansible_collections/azure/azcollection/.idea/vcs.xml -ansible_collections/azure/azcollection/.idea/workspace.xml -ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml ansible_collections/azure/azcollection/meta/execution-environment.yml ansible_collections/azure/azcollection/meta/runtime.yml ansible_collections/azure/azcollection/plugins/doc_fragments/azure.py @@ -22324,9 +23679,11 @@ ansible_collections/azure/azcollection/plugins/doc_fragments/azure_rm.py ansible_collections/azure/azcollection/plugins/doc_fragments/azure_tags.py ansible_collections/azure/azcollection/plugins/inventory/azure_rm.py ansible_collections/azure/azcollection/plugins/lookup/azure_keyvault_secret.py +ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_ext.py ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_rest.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_accesstoken_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_account_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication_info.py @@ -22343,6 +23700,7 @@ ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksagentpool.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksagentpool_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksagentpoolversion_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_akscredentials_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksupgrade_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksversion_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement.py @@ -22495,12 +23853,20 @@ ansible_collections/azure/azcollection/plugins/modules/azure_rm_notificationhub. ansible_collections/azure/azcollection/plugins/modules/azure_rm_notificationhub_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlconfiguration.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlconfiguration_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqldatabase.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqldatabase_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlfirewallrule.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlfirewallrule_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlserver.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlserver_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_privatednsrecordset.py @@ -22521,6 +23887,8 @@ ansible_collections/azure/azcollection/plugins/modules/azure_rm_proximityplaceme ansible_collections/azure/azcollection/plugins/modules/azure_rm_proximityplacementgroup_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipaddress.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipaddress_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache.py @@ -22561,6 +23929,8 @@ ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstan ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlserver.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlserver_info.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey.py +ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount_info.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageblob.py @@ -22611,6 +23981,9 @@ ansible_collections/azure/azcollection/plugins/modules/azure_rm_webappslot.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_webappvnetconnection.py ansible_collections/azure/azcollection/plugins/modules/azure_rm_webappvnetconnection_info.py ansible_collections/azure/azcollection/tests/config.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_account_info/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_account_info/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_account_info/tasks/main.yml @@ -22715,7 +24088,6 @@ ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_devtes ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_devtestlab/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_devtestlab/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/aliases -ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins/azure_service_principal_attribute.py ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_dnsrecordset/aliases @@ -22755,15 +24127,12 @@ ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_ipgrou ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_ipgroup/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_ipgroup/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/aliases -ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/aliases -ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins/azure_service_principal_attribute.py ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/aliases -ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins/azure_service_principal_attribute.py ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_loadbalancer/aliases @@ -22809,6 +24178,9 @@ ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_notifi ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlserver/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlserver/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlserver/tasks/main.yml @@ -22836,6 +24208,9 @@ ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_proxim ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipaddress/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipaddress/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipaddress/tasks/main.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_recoveryservicesvault/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_recoveryservicesvault/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_recoveryservicesvault/tasks/main.yml @@ -22875,6 +24250,9 @@ ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sqlman ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sqlserver/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sqlserver/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sqlserver/tasks/main.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/aliases +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/meta/main.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/tasks/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/meta/main.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/tasks/main.yml @@ -22906,6 +24284,7 @@ ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtua ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/runme.sh ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_latest.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_specific.yml @@ -22918,6 +24297,7 @@ ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtua ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_spot.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_vm_identity.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/setup.yml +ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachineextension/aliases ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachineextension/files/test-protected-settings.json ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachineextension/files/test-public-settings.json @@ -22975,9 +24355,6 @@ ansible_collections/azure/azcollection/tests/integration/targets/inventory_azure ansible_collections/azure/azcollection/tests/integration/targets/inventory_azure/templates/basic2.yml ansible_collections/azure/azcollection/tests/integration/targets/setup_azure/aliases ansible_collections/azure/azcollection/tests/lint/ignore-lint.txt -ansible_collections/azure/azcollection/tests/sanity/ignore-2.13.txt -ansible_collections/azure/azcollection/tests/sanity/ignore-2.14.txt -ansible_collections/azure/azcollection/tests/sanity/ignore-2.15.txt ansible_collections/azure/azcollection/tests/utils/ado/ado.sh ansible_collections/azure/azcollection/tests/utils/shippable/azure.sh ansible_collections/azure/azcollection/tests/utils/shippable/check_matrix.py @@ -24385,6 +25762,7 @@ ansible_collections/cisco/aci/tests/unit/module_utils/.pytest_cache/v/cache/node ansible_collections/cisco/aci/tests/unit/module_utils/.pytest_cache/v/cache/stepwise ansible_collections/cisco/aci/tests/unit/modules/__init__.py ansible_collections/cisco/aci/tests/unit/modules/utils.py +ansible_collections/cisco/asa/.ansible-lint ansible_collections/cisco/asa/.gitignore ansible_collections/cisco/asa/.isort.cfg ansible_collections/cisco/asa/.pre-commit-config.yaml @@ -24421,7 +25799,12 @@ ansible_collections/cisco/asa/docs/cisco.asa.asa_facts_module.rst ansible_collections/cisco/asa/docs/cisco.asa.asa_ogs_module.rst ansible_collections/cisco/asa/meta/runtime.yml ansible_collections/cisco/asa/plugins/action/__init__.py +ansible_collections/cisco/asa/plugins/action/acls.py ansible_collections/cisco/asa/plugins/action/asa.py +ansible_collections/cisco/asa/plugins/action/command.py +ansible_collections/cisco/asa/plugins/action/config.py +ansible_collections/cisco/asa/plugins/action/facts.py +ansible_collections/cisco/asa/plugins/action/ogs.py ansible_collections/cisco/asa/plugins/cliconf/__init__.py ansible_collections/cisco/asa/plugins/cliconf/asa.py ansible_collections/cisco/asa/plugins/doc_fragments/__init__.py @@ -24465,6 +25848,7 @@ ansible_collections/cisco/asa/plugins/modules/asa_ogs.py ansible_collections/cisco/asa/plugins/terminal/__init__.py ansible_collections/cisco/asa/plugins/terminal/asa.py ansible_collections/cisco/asa/tests/.gitignore +ansible_collections/cisco/asa/tests/config.yml ansible_collections/cisco/asa/tests/integration/network-integration.cfg ansible_collections/cisco/asa/tests/integration/target-prefixes.network ansible_collections/cisco/asa/tests/integration/targets/asa_acls/defaults/main.yaml @@ -25485,6 +26869,7 @@ ansible_collections/cisco/intersight/misc/CL2020 EMEAR DEVWKS-1542 Intersight An ansible_collections/cisco/intersight/misc/README.md ansible_collections/cisco/intersight/playbooks/claim_device.yml ansible_collections/cisco/intersight/playbooks/cos_server_policies_and_profiles.yml +ansible_collections/cisco/intersight/playbooks/count_vms.yml ansible_collections/cisco/intersight/playbooks/deploy_server_profiles.yml ansible_collections/cisco/intersight/playbooks/derive_profiles.yml ansible_collections/cisco/intersight/playbooks/devnet_inventory @@ -25578,18 +26963,18 @@ ansible_collections/cisco/ios/bindep.txt ansible_collections/cisco/ios/codecov.yml ansible_collections/cisco/ios/cspell.config.yaml ansible_collections/cisco/ios/mypy.ini +ansible_collections/cisco/ios/platform_guide.rst ansible_collections/cisco/ios/pyproject.toml ansible_collections/cisco/ios/requirements.txt ansible_collections/cisco/ios/test-requirements.txt -ansible_collections/cisco/ios/tox.ini +ansible_collections/cisco/ios/tox-ansible.ini ansible_collections/cisco/ios/.config/dictionary.txt ansible_collections/cisco/ios/.github/CODEOWNERS ansible_collections/cisco/ios/.github/dependabot.yml ansible_collections/cisco/ios/.github/release-drafter.yml -ansible_collections/cisco/ios/.github/workflows/ack.yml +ansible_collections/cisco/ios/.github/workflows/check_label.yml ansible_collections/cisco/ios/.github/workflows/codecoverage.yml -ansible_collections/cisco/ios/.github/workflows/lint.yml -ansible_collections/cisco/ios/.github/workflows/push.yml +ansible_collections/cisco/ios/.github/workflows/draft_release.yml ansible_collections/cisco/ios/.github/workflows/release.yml ansible_collections/cisco/ios/.github/workflows/tests.yml ansible_collections/cisco/ios/changelogs/changelog.yaml @@ -25601,7 +26986,6 @@ ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_banner_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst -ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_cliconf.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_command_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_config_module.rst @@ -25621,7 +27005,6 @@ ansible_collections/cisco/ios/docs/cisco.ios.ios_lldp_interfaces_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_lldp_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_logging_global_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_global_module.rst -ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_ospf_interfaces_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_ospfv2_module.rst ansible_collections/cisco/ios/docs/cisco.ios.ios_ospfv3_module.rst @@ -25662,7 +27045,6 @@ ansible_collections/cisco/ios/plugins/action/lldp_global.py ansible_collections/cisco/ios/plugins/action/lldp_interfaces.py ansible_collections/cisco/ios/plugins/action/logging.py ansible_collections/cisco/ios/plugins/action/logging_global.py -ansible_collections/cisco/ios/plugins/action/ntp.py ansible_collections/cisco/ios/plugins/action/ntp_global.py ansible_collections/cisco/ios/plugins/action/ospf_interfaces.py ansible_collections/cisco/ios/plugins/action/ospfv2.py @@ -25864,15 +27246,7 @@ ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vxlan_vtep/__init__.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vxlan_vtep/vxlan_vtep.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/__init__.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/providers.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py -ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/__init__.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acl_interfaces.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py @@ -25896,6 +27270,7 @@ ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/rout ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/service.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/static_routes.py +ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vxlan_vtep.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/__init__.py ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py @@ -25903,7 +27278,6 @@ ansible_collections/cisco/ios/plugins/modules/__init__.py ansible_collections/cisco/ios/plugins/modules/ios_acl_interfaces.py ansible_collections/cisco/ios/plugins/modules/ios_acls.py ansible_collections/cisco/ios/plugins/modules/ios_banner.py -ansible_collections/cisco/ios/plugins/modules/ios_bgp.py ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py ansible_collections/cisco/ios/plugins/modules/ios_command.py @@ -25923,7 +27297,6 @@ ansible_collections/cisco/ios/plugins/modules/ios_lldp.py ansible_collections/cisco/ios/plugins/modules/ios_lldp_global.py ansible_collections/cisco/ios/plugins/modules/ios_lldp_interfaces.py ansible_collections/cisco/ios/plugins/modules/ios_logging_global.py -ansible_collections/cisco/ios/plugins/modules/ios_ntp.py ansible_collections/cisco/ios/plugins/modules/ios_ntp_global.py ansible_collections/cisco/ios/plugins/modules/ios_ospf_interfaces.py ansible_collections/cisco/ios/plugins/modules/ios_ospfv2.py @@ -25976,6 +27349,7 @@ ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/gathe ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/merged.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/overridden.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/parsed.yaml +ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/rendered.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/rtt.yaml @@ -25988,11 +27362,6 @@ ansible_collections/cisco/ios/tests/integration/targets/ios_banner/tests/cli/bas ansible_collections/cisco/ios/tests/integration/targets/ios_banner/tests/cli/basic-motd.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_banner/tests/cli/basic-no-login.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_banner/tests/cli/multiple-login-exec.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_address_family/defaults/main.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_address_family/meta/main.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_address_family/tasks/cli.yaml @@ -26306,11 +27675,6 @@ ansible_collections/cisco/ios/tests/integration/targets/ios_logging_global/tests ansible_collections/cisco/ios/tests/integration/targets/ios_logging_global/tests/cli/rendered.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_logging_global/tests/cli/replaced.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_logging_global/vars/main.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml -ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml -ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_ntp_global/defaults/main.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_ntp_global/meta/main.yaml ansible_collections/cisco/ios/tests/integration/targets/ios_ntp_global/tasks/cli.yaml @@ -26522,20 +27886,13 @@ ansible_collections/cisco/ios/tests/integration/targets/ios_vxlan_vtep/vars/main ansible_collections/cisco/ios/tests/integration/targets/prepare_ios_tests/meta/main.yaml ansible_collections/cisco/ios/tests/integration/targets/prepare_ios_tests/tasks/main.yml ansible_collections/cisco/ios/tests/integration/targets/prepare_ios_tests/templates/config.j2 -ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt -ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt -ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt -ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt ansible_collections/cisco/ios/tests/sanity/ignore-2.14.txt ansible_collections/cisco/ios/tests/sanity/ignore-2.15.txt ansible_collections/cisco/ios/tests/sanity/ignore-2.16.txt ansible_collections/cisco/ios/tests/sanity/ignore-2.17.txt -ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt +ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt ansible_collections/cisco/ios/tests/unit/__init__.py ansible_collections/cisco/ios/tests/unit/requirements.txt -ansible_collections/cisco/ios/tests/unit/compat/__init__.py -ansible_collections/cisco/ios/tests/unit/compat/mock.py -ansible_collections/cisco/ios/tests/unit/compat/unittest.py ansible_collections/cisco/ios/tests/unit/mock/__init__.py ansible_collections/cisco/ios/tests/unit/mock/loader.py ansible_collections/cisco/ios/tests/unit/mock/path.py @@ -26551,7 +27908,6 @@ ansible_collections/cisco/ios/tests/unit/modules/network/ios/ios_module.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py -ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py @@ -26569,7 +27925,6 @@ ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interf ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py -ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py @@ -26642,12 +27997,13 @@ ansible_collections/cisco/ios/tests/unit/plugins/cliconf/fixtures/slxos/show_cha ansible_collections/cisco/ios/tests/unit/plugins/cliconf/fixtures/slxos/show_running-config ansible_collections/cisco/ios/tests/unit/plugins/cliconf/fixtures/slxos/show_startup-config ansible_collections/cisco/ios/tests/unit/plugins/cliconf/fixtures/slxos/show_version +ansible_collections/cisco/iosxr/.ansible-lint +ansible_collections/cisco/iosxr/.flake8 ansible_collections/cisco/iosxr/.gitignore ansible_collections/cisco/iosxr/.isort.cfg ansible_collections/cisco/iosxr/.pre-commit-config.yaml ansible_collections/cisco/iosxr/.prettierignore ansible_collections/cisco/iosxr/.yamllint -ansible_collections/cisco/iosxr/.zuul.yaml ansible_collections/cisco/iosxr/CHANGELOG.rst ansible_collections/cisco/iosxr/FILES.json ansible_collections/cisco/iosxr/LICENSE @@ -26655,16 +28011,18 @@ ansible_collections/cisco/iosxr/MANIFEST.json ansible_collections/cisco/iosxr/README.md ansible_collections/cisco/iosxr/bindep.txt ansible_collections/cisco/iosxr/codecov.yml +ansible_collections/cisco/iosxr/platform_guide.rst ansible_collections/cisco/iosxr/pyproject.toml ansible_collections/cisco/iosxr/requirements.txt ansible_collections/cisco/iosxr/test-requirements.txt -ansible_collections/cisco/iosxr/tox.ini +ansible_collections/cisco/iosxr/tox-ansible.ini ansible_collections/cisco/iosxr/.config/ansible-lint.yml +ansible_collections/cisco/iosxr/.github/CODEOWNERS ansible_collections/cisco/iosxr/.github/dependabot.yml ansible_collections/cisco/iosxr/.github/release-drafter.yml -ansible_collections/cisco/iosxr/.github/workflows/ack.yml +ansible_collections/cisco/iosxr/.github/workflows/check_label.yml ansible_collections/cisco/iosxr/.github/workflows/codecoverage.yml -ansible_collections/cisco/iosxr/.github/workflows/push.yml +ansible_collections/cisco/iosxr/.github/workflows/draft_release.yml ansible_collections/cisco/iosxr/.github/workflows/release.yml ansible_collections/cisco/iosxr/.github/workflows/tests.yml ansible_collections/cisco/iosxr/changelogs/changelog.yaml @@ -26692,7 +28050,6 @@ ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_lag_interfaces_module.rst ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_lldp_global_module.rst ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_lldp_interfaces_module.rst ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_logging_global_module.rst -ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_logging_module.rst ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_netconf.rst ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_netconf_module.rst ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_ntp_global_module.rst @@ -26941,7 +28298,6 @@ ansible_collections/cisco/iosxr/plugins/modules/iosxr_lacp_interfaces.py ansible_collections/cisco/iosxr/plugins/modules/iosxr_lag_interfaces.py ansible_collections/cisco/iosxr/plugins/modules/iosxr_lldp_global.py ansible_collections/cisco/iosxr/plugins/modules/iosxr_lldp_interfaces.py -ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging.py ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging_global.py ansible_collections/cisco/iosxr/plugins/modules/iosxr_netconf.py ansible_collections/cisco/iosxr/plugins/modules/iosxr_ntp_global.py @@ -27298,13 +28654,6 @@ ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_lldp_interfaces/ ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rtt.yaml ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures/parsed.cfg ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_lldp_interfaces/vars/main.yaml -ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/defaults/main.yaml -ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/meta/main.yaml -ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/cli.yaml -ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/main.yaml -ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/netconf.yaml -ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/cli/basic.yaml -ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/netconf/basic.yaml ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging_global/defaults/main.yml ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging_global/meta/main.yml ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging_global/tasks/cli.yaml @@ -27477,20 +28826,13 @@ ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_user/tests/netco ansible_collections/cisco/iosxr/tests/integration/targets/prepare_iosxr_tests/meta/main.yaml ansible_collections/cisco/iosxr/tests/integration/targets/prepare_iosxr_tests/tasks/main.yml ansible_collections/cisco/iosxr/tests/integration/targets/prepare_iosxr_tests/templates/config.j2 -ansible_collections/cisco/iosxr/tests/sanity/ignore-2.10.txt -ansible_collections/cisco/iosxr/tests/sanity/ignore-2.11.txt -ansible_collections/cisco/iosxr/tests/sanity/ignore-2.12.txt -ansible_collections/cisco/iosxr/tests/sanity/ignore-2.13.txt ansible_collections/cisco/iosxr/tests/sanity/ignore-2.14.txt ansible_collections/cisco/iosxr/tests/sanity/ignore-2.15.txt ansible_collections/cisco/iosxr/tests/sanity/ignore-2.16.txt ansible_collections/cisco/iosxr/tests/sanity/ignore-2.17.txt -ansible_collections/cisco/iosxr/tests/sanity/ignore-2.9.txt +ansible_collections/cisco/iosxr/tests/sanity/ignore-2.18.txt ansible_collections/cisco/iosxr/tests/unit/__init__.py ansible_collections/cisco/iosxr/tests/unit/requirements.txt -ansible_collections/cisco/iosxr/tests/unit/compat/__init__.py -ansible_collections/cisco/iosxr/tests/unit/compat/mock.py -ansible_collections/cisco/iosxr/tests/unit/compat/unittest.py ansible_collections/cisco/iosxr/tests/unit/mock/__init__.py ansible_collections/cisco/iosxr/tests/unit/mock/loader.py ansible_collections/cisco/iosxr/tests/unit/mock/path.py @@ -27560,6 +28902,8 @@ ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/iosxr_ ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/iosxr_static_routes_config.cfg ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/iosxr_system_config.cfg ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/iosxr_user_config.cfg +ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp +ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_interfaces ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_ipv6_interface ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_lldp @@ -27574,12 +28918,12 @@ ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/clicon ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr/show_version__utility_head_-n_20 ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_running-config_hostname ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_version__utility_head_-n_20 +ansible_collections/cisco/ise/.DS_Store ansible_collections/cisco/ise/.gitignore ansible_collections/cisco/ise/FILES.json ansible_collections/cisco/ise/LICENSE ansible_collections/cisco/ise/MANIFEST.json ansible_collections/cisco/ise/Makefile -ansible_collections/cisco/ise/Pipfile ansible_collections/cisco/ise/README.md ansible_collections/cisco/ise/requirements.txt ansible_collections/cisco/ise/.github/ISSUE_TEMPLATE/bug_report.md @@ -27587,6 +28931,8 @@ ansible_collections/cisco/ise/.github/ISSUE_TEMPLATE/config.yml ansible_collections/cisco/ise/.github/ISSUE_TEMPLATE/feature_request.md ansible_collections/cisco/ise/.github/workflows/docs.yml ansible_collections/cisco/ise/.github/workflows/sanity_tests.yml +ansible_collections/cisco/ise/.vscode/launch.json +ansible_collections/cisco/ise/.vscode/settings.json ansible_collections/cisco/ise/changelogs/changelog.yaml ansible_collections/cisco/ise/docs/Makefile ansible_collections/cisco/ise/docs/conf.py @@ -27656,10 +29002,12 @@ ansible_collections/cisco/ise/playbooks/trustsec_vn.yml ansible_collections/cisco/ise/playbooks/trustsec_vn_vlan_mapping.yml ansible_collections/cisco/ise/playbooks/group_vars/ise_servers ansible_collections/cisco/ise/playbooks/vars/device_administration_time_date_conditions.yml +ansible_collections/cisco/ise/plugins/.DS_Store ansible_collections/cisco/ise/plugins/action/aci_bindings_info.py ansible_collections/cisco/ise/plugins/action/aci_settings.py ansible_collections/cisco/ise/plugins/action/aci_settings_info.py ansible_collections/cisco/ise/plugins/action/aci_test_connectivity.py +ansible_collections/cisco/ise/plugins/action/active_directories_info.py ansible_collections/cisco/ise/plugins/action/active_directory.py ansible_collections/cisco/ise/plugins/action/active_directory_add_groups.py ansible_collections/cisco/ise/plugins/action/active_directory_groups_by_domain_info.py @@ -27671,6 +29019,7 @@ ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain.py ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain_with_all_nodes.py ansible_collections/cisco/ise/plugins/action/active_directory_trusted_domains_info.py ansible_collections/cisco/ise/plugins/action/active_directory_user_groups_info.py +ansible_collections/cisco/ise/plugins/action/ad_groups_info.py ansible_collections/cisco/ise/plugins/action/admin_user_info.py ansible_collections/cisco/ise/plugins/action/allowed_protocols.py ansible_collections/cisco/ise/plugins/action/allowed_protocols_info.py @@ -27699,13 +29048,14 @@ ansible_collections/cisco/ise/plugins/action/certificate_profile_info.py ansible_collections/cisco/ise/plugins/action/certificate_template_info.py ansible_collections/cisco/ise/plugins/action/configuration.py ansible_collections/cisco/ise/plugins/action/configuration_info.py -ansible_collections/cisco/ise/plugins/action/connector_config.py -ansible_collections/cisco/ise/plugins/action/connector_config_info.py ansible_collections/cisco/ise/plugins/action/csr_delete.py ansible_collections/cisco/ise/plugins/action/csr_export_info.py ansible_collections/cisco/ise/plugins/action/csr_generate.py ansible_collections/cisco/ise/plugins/action/csr_generate_intermediate_ca.py ansible_collections/cisco/ise/plugins/action/csr_info.py +ansible_collections/cisco/ise/plugins/action/custom_attributes.py +ansible_collections/cisco/ise/plugins/action/custom_attributes_info.py +ansible_collections/cisco/ise/plugins/action/custom_attributes_rename.py ansible_collections/cisco/ise/plugins/action/dataconnect_info.py ansible_collections/cisco/ise/plugins/action/dataconnect_settings_info.py ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password.py @@ -27743,9 +29093,16 @@ ansible_collections/cisco/ise/plugins/action/device_administration_profiles_info ansible_collections/cisco/ise/plugins/action/device_administration_service_names_info.py ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions.py ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions_info.py -ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py ansible_collections/cisco/ise/plugins/action/downloadable_acl.py ansible_collections/cisco/ise/plugins/action/downloadable_acl_info.py +ansible_collections/cisco/ise/plugins/action/duo_identity_sync.py +ansible_collections/cisco/ise/plugins/action/duo_identity_sync_cancel_info.py +ansible_collections/cisco/ise/plugins/action/duo_identity_sync_info.py +ansible_collections/cisco/ise/plugins/action/duo_identity_sync_status.py +ansible_collections/cisco/ise/plugins/action/duo_identitysync_sync_info.py +ansible_collections/cisco/ise/plugins/action/duo_mfa.py +ansible_collections/cisco/ise/plugins/action/duo_mfa_info.py +ansible_collections/cisco/ise/plugins/action/duo_mfa_testconnection.py ansible_collections/cisco/ise/plugins/action/egress_matrix_cell.py ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_monitor_status_info.py ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_request.py @@ -27764,6 +29121,12 @@ ansible_collections/cisco/ise/plugins/action/endpoint_group_info.py ansible_collections/cisco/ise/plugins/action/endpoint_info.py ansible_collections/cisco/ise/plugins/action/endpoint_register.py ansible_collections/cisco/ise/plugins/action/endpoint_release_rejected_endpoint.py +ansible_collections/cisco/ise/plugins/action/endpoints.py +ansible_collections/cisco/ise/plugins/action/endpoints_bulk.py +ansible_collections/cisco/ise/plugins/action/endpoints_bulk_info.py +ansible_collections/cisco/ise/plugins/action/endpoints_device_type_info.py +ansible_collections/cisco/ise/plugins/action/endpoints_info.py +ansible_collections/cisco/ise/plugins/action/endpoints_task.py ansible_collections/cisco/ise/plugins/action/external_radius_server.py ansible_collections/cisco/ise/plugins/action/external_radius_server_info.py ansible_collections/cisco/ise/plugins/action/filter_policy.py @@ -27800,6 +29163,16 @@ ansible_collections/cisco/ise/plugins/action/identity_group.py ansible_collections/cisco/ise/plugins/action/identity_group_info.py ansible_collections/cisco/ise/plugins/action/internal_user.py ansible_collections/cisco/ise/plugins/action/internal_user_info.py +ansible_collections/cisco/ise/plugins/action/ipsec.py +ansible_collections/cisco/ise/plugins/action/ipsec_bulk.py +ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py +ansible_collections/cisco/ise/plugins/action/ipsec_delete.py +ansible_collections/cisco/ise/plugins/action/ipsec_delete_info.py +ansible_collections/cisco/ise/plugins/action/ipsec_disable.py +ansible_collections/cisco/ise/plugins/action/ipsec_disable_info.py +ansible_collections/cisco/ise/plugins/action/ipsec_enable.py +ansible_collections/cisco/ise/plugins/action/ipsec_enable_info.py +ansible_collections/cisco/ise/plugins/action/ipsec_info.py ansible_collections/cisco/ise/plugins/action/ise_root_ca_regenerate.py ansible_collections/cisco/ise/plugins/action/licensing_connection_type_info.py ansible_collections/cisco/ise/plugins/action/licensing_eval_license_info.py @@ -27912,6 +29285,12 @@ ansible_collections/cisco/ise/plugins/action/portal_theme_info.py ansible_collections/cisco/ise/plugins/action/profiler_profile_info.py ansible_collections/cisco/ise/plugins/action/proxy_connection_settings.py ansible_collections/cisco/ise/plugins/action/proxy_connection_settings_info.py +ansible_collections/cisco/ise/plugins/action/px_grid_direct.py +ansible_collections/cisco/ise/plugins/action/px_grid_direct_dictionary_info.py +ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py +ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync.py +ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync_info.py +ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py ansible_collections/cisco/ise/plugins/action/px_grid_node_approve.py ansible_collections/cisco/ise/plugins/action/px_grid_node_delete.py ansible_collections/cisco/ise/plugins/action/px_grid_node_info.py @@ -27953,6 +29332,8 @@ ansible_collections/cisco/ise/plugins/action/renew_certificate.py ansible_collections/cisco/ise/plugins/action/repository.py ansible_collections/cisco/ise/plugins/action/repository_files_info.py ansible_collections/cisco/ise/plugins/action/repository_info.py +ansible_collections/cisco/ise/plugins/action/reservation.py +ansible_collections/cisco/ise/plugins/action/reservation_info.py ansible_collections/cisco/ise/plugins/action/resource_version_info.py ansible_collections/cisco/ise/plugins/action/rest_id_store.py ansible_collections/cisco/ise/plugins/action/rest_id_store_info.py @@ -27994,6 +29375,8 @@ ansible_collections/cisco/ise/plugins/action/sponsor_portal.py ansible_collections/cisco/ise/plugins/action/sponsor_portal_info.py ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal.py ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal_info.py +ansible_collections/cisco/ise/plugins/action/stop_replication.py +ansible_collections/cisco/ise/plugins/action/stop_replication_info.py ansible_collections/cisco/ise/plugins/action/subscriber.py ansible_collections/cisco/ise/plugins/action/subscriber_bulk.py ansible_collections/cisco/ise/plugins/action/subscriber_imsi_info.py @@ -28029,7 +29412,6 @@ ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence.py ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence_info.py ansible_collections/cisco/ise/plugins/action/tasks_info.py ansible_collections/cisco/ise/plugins/action/telemetry_info.py -ansible_collections/cisco/ise/plugins/action/test_connector.py ansible_collections/cisco/ise/plugins/action/threat_vulnerabilities_clear.py ansible_collections/cisco/ise/plugins/action/transport_gateway_settings.py ansible_collections/cisco/ise/plugins/action/transport_gateway_settings_info.py @@ -28037,6 +29419,35 @@ ansible_collections/cisco/ise/plugins/action/trusted_certificate.py ansible_collections/cisco/ise/plugins/action/trusted_certificate_export_info.py ansible_collections/cisco/ise/plugins/action/trusted_certificate_import.py ansible_collections/cisco/ise/plugins/action/trusted_certificate_info.py +ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app.py +ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app_info.py +ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping.py +ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_create.py +ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_delete.py +ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_update.py +ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_info.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_create.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_delete.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_update.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_info.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_create.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_update.py +ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_info.py +ansible_collections/cisco/ise/plugins/action/upgrade_proceed.py +ansible_collections/cisco/ise/plugins/action/upgrade_proceed_info.py +ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel.py +ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel_info.py +ansible_collections/cisco/ise/plugins/action/upgrade_stage_start.py +ansible_collections/cisco/ise/plugins/action/upgrade_stage_start_info.py +ansible_collections/cisco/ise/plugins/action/user_equipment.py +ansible_collections/cisco/ise/plugins/action/user_equipment_bulk.py +ansible_collections/cisco/ise/plugins/action/user_equipment_csv.py +ansible_collections/cisco/ise/plugins/action/user_equipment_imei_info.py +ansible_collections/cisco/ise/plugins/action/user_equipment_info.py +ansible_collections/cisco/ise/plugins/action/user_equipment_subscriber_info.py ansible_collections/cisco/ise/plugins/doc_fragments/__init__.py ansible_collections/cisco/ise/plugins/doc_fragments/module.py ansible_collections/cisco/ise/plugins/doc_fragments/module_info.py @@ -28045,6 +29456,7 @@ ansible_collections/cisco/ise/plugins/modules/aci_bindings_info.py ansible_collections/cisco/ise/plugins/modules/aci_settings.py ansible_collections/cisco/ise/plugins/modules/aci_settings_info.py ansible_collections/cisco/ise/plugins/modules/aci_test_connectivity.py +ansible_collections/cisco/ise/plugins/modules/active_directories_info.py ansible_collections/cisco/ise/plugins/modules/active_directory.py ansible_collections/cisco/ise/plugins/modules/active_directory_add_groups.py ansible_collections/cisco/ise/plugins/modules/active_directory_groups_by_domain_info.py @@ -28056,6 +29468,7 @@ ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain.py ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain_with_all_nodes.py ansible_collections/cisco/ise/plugins/modules/active_directory_trusted_domains_info.py ansible_collections/cisco/ise/plugins/modules/active_directory_user_groups_info.py +ansible_collections/cisco/ise/plugins/modules/ad_groups_info.py ansible_collections/cisco/ise/plugins/modules/admin_user_info.py ansible_collections/cisco/ise/plugins/modules/allowed_protocols.py ansible_collections/cisco/ise/plugins/modules/allowed_protocols_info.py @@ -28084,13 +29497,14 @@ ansible_collections/cisco/ise/plugins/modules/certificate_profile_info.py ansible_collections/cisco/ise/plugins/modules/certificate_template_info.py ansible_collections/cisco/ise/plugins/modules/configuration.py ansible_collections/cisco/ise/plugins/modules/configuration_info.py -ansible_collections/cisco/ise/plugins/modules/connector_config.py -ansible_collections/cisco/ise/plugins/modules/connector_config_info.py ansible_collections/cisco/ise/plugins/modules/csr_delete.py ansible_collections/cisco/ise/plugins/modules/csr_export_info.py ansible_collections/cisco/ise/plugins/modules/csr_generate.py ansible_collections/cisco/ise/plugins/modules/csr_generate_intermediate_ca.py ansible_collections/cisco/ise/plugins/modules/csr_info.py +ansible_collections/cisco/ise/plugins/modules/custom_attributes.py +ansible_collections/cisco/ise/plugins/modules/custom_attributes_info.py +ansible_collections/cisco/ise/plugins/modules/custom_attributes_rename.py ansible_collections/cisco/ise/plugins/modules/dataconnect_info.py ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_info.py ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password.py @@ -28128,9 +29542,16 @@ ansible_collections/cisco/ise/plugins/modules/device_administration_profiles_inf ansible_collections/cisco/ise/plugins/modules/device_administration_service_names_info.py ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions.py ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions_info.py -ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py ansible_collections/cisco/ise/plugins/modules/downloadable_acl.py ansible_collections/cisco/ise/plugins/modules/downloadable_acl_info.py +ansible_collections/cisco/ise/plugins/modules/duo_identity_sync.py +ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_cancel_info.py +ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_info.py +ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_status.py +ansible_collections/cisco/ise/plugins/modules/duo_identitysync_sync_info.py +ansible_collections/cisco/ise/plugins/modules/duo_mfa.py +ansible_collections/cisco/ise/plugins/modules/duo_mfa_info.py +ansible_collections/cisco/ise/plugins/modules/duo_mfa_testconnection.py ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell.py ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_request.py @@ -28149,6 +29570,12 @@ ansible_collections/cisco/ise/plugins/modules/endpoint_group_info.py ansible_collections/cisco/ise/plugins/modules/endpoint_info.py ansible_collections/cisco/ise/plugins/modules/endpoint_register.py ansible_collections/cisco/ise/plugins/modules/endpoint_release_rejected_endpoint.py +ansible_collections/cisco/ise/plugins/modules/endpoints.py +ansible_collections/cisco/ise/plugins/modules/endpoints_bulk.py +ansible_collections/cisco/ise/plugins/modules/endpoints_bulk_info.py +ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py +ansible_collections/cisco/ise/plugins/modules/endpoints_info.py +ansible_collections/cisco/ise/plugins/modules/endpoints_task.py ansible_collections/cisco/ise/plugins/modules/external_radius_server.py ansible_collections/cisco/ise/plugins/modules/external_radius_server_info.py ansible_collections/cisco/ise/plugins/modules/filter_policy.py @@ -28185,6 +29612,16 @@ ansible_collections/cisco/ise/plugins/modules/identity_group.py ansible_collections/cisco/ise/plugins/modules/identity_group_info.py ansible_collections/cisco/ise/plugins/modules/internal_user.py ansible_collections/cisco/ise/plugins/modules/internal_user_info.py +ansible_collections/cisco/ise/plugins/modules/ipsec.py +ansible_collections/cisco/ise/plugins/modules/ipsec_bulk.py +ansible_collections/cisco/ise/plugins/modules/ipsec_certificates_info.py +ansible_collections/cisco/ise/plugins/modules/ipsec_delete.py +ansible_collections/cisco/ise/plugins/modules/ipsec_delete_info.py +ansible_collections/cisco/ise/plugins/modules/ipsec_disable.py +ansible_collections/cisco/ise/plugins/modules/ipsec_disable_info.py +ansible_collections/cisco/ise/plugins/modules/ipsec_enable.py +ansible_collections/cisco/ise/plugins/modules/ipsec_enable_info.py +ansible_collections/cisco/ise/plugins/modules/ipsec_info.py ansible_collections/cisco/ise/plugins/modules/ise_root_ca_regenerate.py ansible_collections/cisco/ise/plugins/modules/licensing_connection_type_info.py ansible_collections/cisco/ise/plugins/modules/licensing_eval_license_info.py @@ -28297,6 +29734,12 @@ ansible_collections/cisco/ise/plugins/modules/portal_theme_info.py ansible_collections/cisco/ise/plugins/modules/profiler_profile_info.py ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings.py ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings_info.py +ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py +ansible_collections/cisco/ise/plugins/modules/px_grid_direct_dictionary_info.py +ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py +ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync.py +ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync_info.py +ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py ansible_collections/cisco/ise/plugins/modules/px_grid_node_approve.py ansible_collections/cisco/ise/plugins/modules/px_grid_node_delete.py ansible_collections/cisco/ise/plugins/modules/px_grid_node_info.py @@ -28338,6 +29781,8 @@ ansible_collections/cisco/ise/plugins/modules/renew_certificate.py ansible_collections/cisco/ise/plugins/modules/repository.py ansible_collections/cisco/ise/plugins/modules/repository_files_info.py ansible_collections/cisco/ise/plugins/modules/repository_info.py +ansible_collections/cisco/ise/plugins/modules/reservation.py +ansible_collections/cisco/ise/plugins/modules/reservation_info.py ansible_collections/cisco/ise/plugins/modules/resource_version_info.py ansible_collections/cisco/ise/plugins/modules/rest_id_store.py ansible_collections/cisco/ise/plugins/modules/rest_id_store_info.py @@ -28379,6 +29824,8 @@ ansible_collections/cisco/ise/plugins/modules/sponsor_portal.py ansible_collections/cisco/ise/plugins/modules/sponsor_portal_info.py ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal.py ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal_info.py +ansible_collections/cisco/ise/plugins/modules/stop_replication.py +ansible_collections/cisco/ise/plugins/modules/stop_replication_info.py ansible_collections/cisco/ise/plugins/modules/subscriber.py ansible_collections/cisco/ise/plugins/modules/subscriber_bulk.py ansible_collections/cisco/ise/plugins/modules/subscriber_imsi_info.py @@ -28414,7 +29861,6 @@ ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence.py ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence_info.py ansible_collections/cisco/ise/plugins/modules/tasks_info.py ansible_collections/cisco/ise/plugins/modules/telemetry_info.py -ansible_collections/cisco/ise/plugins/modules/test_connector.py ansible_collections/cisco/ise/plugins/modules/threat_vulnerabilities_clear.py ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings.py ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings_info.py @@ -28422,6 +29868,35 @@ ansible_collections/cisco/ise/plugins/modules/trusted_certificate.py ansible_collections/cisco/ise/plugins/modules/trusted_certificate_export_info.py ansible_collections/cisco/ise/plugins/modules/trusted_certificate_import.py ansible_collections/cisco/ise/plugins/modules/trusted_certificate_info.py +ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app.py +ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app_info.py +ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping.py +ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_create.py +ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py +ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_update.py +ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_info.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_create.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_delete.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_update.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_info.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py +ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_info.py +ansible_collections/cisco/ise/plugins/modules/upgrade_proceed.py +ansible_collections/cisco/ise/plugins/modules/upgrade_proceed_info.py +ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel.py +ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel_info.py +ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start.py +ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start_info.py +ansible_collections/cisco/ise/plugins/modules/user_equipment.py +ansible_collections/cisco/ise/plugins/modules/user_equipment_bulk.py +ansible_collections/cisco/ise/plugins/modules/user_equipment_csv.py +ansible_collections/cisco/ise/plugins/modules/user_equipment_imei_info.py +ansible_collections/cisco/ise/plugins/modules/user_equipment_info.py +ansible_collections/cisco/ise/plugins/modules/user_equipment_subscriber_info.py ansible_collections/cisco/ise/plugins/plugin_utils/__init__.py ansible_collections/cisco/ise/plugins/plugin_utils/exceptions.py ansible_collections/cisco/ise/plugins/plugin_utils/ise.py @@ -29612,6 +31087,7 @@ ansible_collections/cisco/meraki/tests/sanity/ignore-2.14.txt ansible_collections/cisco/meraki/tests/sanity/ignore-2.15.txt ansible_collections/cisco/meraki/tests/sanity/ignore-2.16.txt ansible_collections/cisco/meraki/tests/sanity/ignore-2.17.txt +ansible_collections/cisco/meraki/tests/sanity/ignore-2.18.txt ansible_collections/cisco/meraki/tests/sanity/ignore-2.9.txt ansible_collections/cisco/meraki/workflows/docs.yml ansible_collections/cisco/meraki/workflows/sanity_tests.yml @@ -29871,6 +31347,7 @@ ansible_collections/cisco/mso/tests/integration/targets/ndo_schema_template_depl ansible_collections/cisco/mso/tests/integration/targets/ndo_schema_template_deploy/tasks/main.yml ansible_collections/cisco/mso/tests/sanity/requirements.txt ansible_collections/cisco/nxos/.ansible-lint +ansible_collections/cisco/nxos/.flake8 ansible_collections/cisco/nxos/.gitignore ansible_collections/cisco/nxos/.isort.cfg ansible_collections/cisco/nxos/.pre-commit-config.yaml @@ -29882,15 +31359,17 @@ ansible_collections/cisco/nxos/MANIFEST.json ansible_collections/cisco/nxos/README.md ansible_collections/cisco/nxos/bindep.txt ansible_collections/cisco/nxos/codecov.yml +ansible_collections/cisco/nxos/platform_guide.rst ansible_collections/cisco/nxos/pyproject.toml ansible_collections/cisco/nxos/requirements.txt ansible_collections/cisco/nxos/test-requirements.txt -ansible_collections/cisco/nxos/tox.ini +ansible_collections/cisco/nxos/tox-ansible.ini ansible_collections/cisco/nxos/.github/dependabot.yml ansible_collections/cisco/nxos/.github/release-drafter.yml -ansible_collections/cisco/nxos/.github/workflows/ack.yml +ansible_collections/cisco/nxos/.github/workflows/check_label.yml ansible_collections/cisco/nxos/.github/workflows/codecoverage.yml -ansible_collections/cisco/nxos/.github/workflows/push.yml +ansible_collections/cisco/nxos/.github/workflows/draft_release.yml +ansible_collections/cisco/nxos/.github/workflows/integration-test.yml ansible_collections/cisco/nxos/.github/workflows/release.yml ansible_collections/cisco/nxos/.github/workflows/tests.yml ansible_collections/cisco/nxos/changelogs/changelog.yaml @@ -29937,12 +31416,8 @@ ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lag_interfaces_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lldp_global_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lldp_interfaces_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_global_module.rst -ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_netconf.rst -ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_auth_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_global_module.rst -ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_module.rst -ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_options_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_nxapi_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospf_interfaces_module.rst ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv2_module.rst @@ -30344,12 +31819,8 @@ ansible_collections/cisco/nxos/plugins/modules/nxos_lacp_interfaces.py ansible_collections/cisco/nxos/plugins/modules/nxos_lag_interfaces.py ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_global.py ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_interfaces.py -ansible_collections/cisco/nxos/plugins/modules/nxos_logging.py ansible_collections/cisco/nxos/plugins/modules/nxos_logging_global.py -ansible_collections/cisco/nxos/plugins/modules/nxos_ntp.py -ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_auth.py ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_global.py -ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_options.py ansible_collections/cisco/nxos/plugins/modules/nxos_nxapi.py ansible_collections/cisco/nxos/plugins/modules/nxos_ospf_interfaces.py ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv2.py @@ -30397,9 +31868,13 @@ ansible_collections/cisco/nxos/plugins/netconf/nxos.py ansible_collections/cisco/nxos/plugins/terminal/__init__.py ansible_collections/cisco/nxos/plugins/terminal/nxos.py ansible_collections/cisco/nxos/tests/.gitignore +ansible_collections/cisco/nxos/tests/__init__.py ansible_collections/cisco/nxos/tests/config.yml +ansible_collections/cisco/nxos/tests/integration/__init__.py ansible_collections/cisco/nxos/tests/integration/network-integration.requirements.txt ansible_collections/cisco/nxos/tests/integration/target-prefixes.network +ansible_collections/cisco/nxos/tests/integration/test_integration.py +ansible_collections/cisco/nxos/tests/integration/labs/single.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_aaa_server/defaults/main.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_aaa_server/meta/main.yml ansible_collections/cisco/nxos/tests/integration/targets/nxos_aaa_server/tasks/cli.yaml @@ -30642,6 +32117,7 @@ ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tasks/main.y ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tasks/nxapi.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/all_facts.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/default_facts.yaml +ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/invalid_subset.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/not_hardware.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/sanity.yaml @@ -30890,13 +32366,6 @@ ansible_collections/cisco/nxos/tests/integration/targets/nxos_lldp_interfaces/te ansible_collections/cisco/nxos/tests/integration/targets/nxos_lldp_interfaces/tests/common/replaced.yml ansible_collections/cisco/nxos/tests/integration/targets/nxos_lldp_interfaces/tests/common/rtt.yml ansible_collections/cisco/nxos/tests/integration/targets/nxos_lldp_interfaces/vars/main.yml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/defaults/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/meta/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/cli.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/nxapi.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/basic.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/purge.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging_global/defaults/main.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging_global/meta/main.yml ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging_global/tasks/cli.yaml @@ -30914,18 +32383,6 @@ ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging_global/tes ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging_global/tests/common/replaced.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging_global/tests/common/fixtures/parsed.cfg ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging_global/vars/main.yml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/defaults/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/meta/main.yml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/cli.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/nxapi.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tests/common/sanity.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/defaults/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/meta/main.yml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/cli.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/nxapi.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tests/common/sanity.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_global/defaults/main.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_global/meta/main.yml ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_global/tasks/cli.yaml @@ -30943,12 +32400,6 @@ ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_global/tests/c ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_global/tests/common/replaced.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_global/tests/common/fixtures/parsed.cfg ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_global/vars/main.yml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/defaults/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/meta/main.yml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/cli.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/main.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/nxapi.yaml -ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_nxapi/defaults/main.yaml ansible_collections/cisco/nxos/tests/integration/targets/nxos_nxapi/meta/main.yml ansible_collections/cisco/nxos/tests/integration/targets/nxos_nxapi/tasks/cli.yaml @@ -31341,20 +32792,13 @@ ansible_collections/cisco/nxos/tests/integration/targets/nxos_zone_zoneset/vars/ ansible_collections/cisco/nxos/tests/integration/targets/prepare_nxos_tests/meta/main.yaml ansible_collections/cisco/nxos/tests/integration/targets/prepare_nxos_tests/tasks/main.yml ansible_collections/cisco/nxos/tests/integration/targets/prepare_nxos_tests/tasks/prepare.yml -ansible_collections/cisco/nxos/tests/sanity/ignore-2.10.txt -ansible_collections/cisco/nxos/tests/sanity/ignore-2.11.txt -ansible_collections/cisco/nxos/tests/sanity/ignore-2.12.txt -ansible_collections/cisco/nxos/tests/sanity/ignore-2.13.txt ansible_collections/cisco/nxos/tests/sanity/ignore-2.14.txt ansible_collections/cisco/nxos/tests/sanity/ignore-2.15.txt ansible_collections/cisco/nxos/tests/sanity/ignore-2.16.txt ansible_collections/cisco/nxos/tests/sanity/ignore-2.17.txt -ansible_collections/cisco/nxos/tests/sanity/ignore-2.9.txt +ansible_collections/cisco/nxos/tests/sanity/ignore-2.18.txt ansible_collections/cisco/nxos/tests/unit/__init__.py ansible_collections/cisco/nxos/tests/unit/requirements.txt -ansible_collections/cisco/nxos/tests/unit/compat/__init__.py -ansible_collections/cisco/nxos/tests/unit/compat/mock.py -ansible_collections/cisco/nxos/tests/unit/compat/unittest.py ansible_collections/cisco/nxos/tests/unit/mock/__init__.py ansible_collections/cisco/nxos/tests/unit/mock/loader.py ansible_collections/cisco/nxos/tests/unit/mock/path.py @@ -31624,6 +33068,7 @@ ansible_collections/cisco/ucs/plugins/modules/ucs_vlans.py ansible_collections/cisco/ucs/plugins/modules/ucs_vnic_template.py ansible_collections/cisco/ucs/plugins/modules/ucs_vsans.py ansible_collections/cisco/ucs/plugins/modules/ucs_wwn_pool.py +ansible_collections/cloud/common/.ansible-lint ansible_collections/cloud/common/CHANGELOG.rst ansible_collections/cloud/common/CI.md ansible_collections/cloud/common/FILES.json @@ -31635,10 +33080,12 @@ ansible_collections/cloud/common/pytest.ini ansible_collections/cloud/common/requirements.txt ansible_collections/cloud/common/test-requirements.txt ansible_collections/cloud/common/tox.ini -ansible_collections/cloud/common/.github/workflows/changelog.yml -ansible_collections/cloud/common/.github/workflows/linters.yml -ansible_collections/cloud/common/.github/workflows/sanity_and_units.yml -ansible_collections/cloud/common/.github/workflows/unit-ansible-2.9.yml +ansible_collections/cloud/common/.github/workflows/changelog.yaml +ansible_collections/cloud/common/.github/workflows/galaxy-import.yaml +ansible_collections/cloud/common/.github/workflows/integration-tests-kubernetes-core.yaml +ansible_collections/cloud/common/.github/workflows/linters.yaml +ansible_collections/cloud/common/.github/workflows/sanity-tests.yaml +ansible_collections/cloud/common/.github/workflows/unit-tests.yaml ansible_collections/cloud/common/changelogs/changelog.yaml ansible_collections/cloud/common/changelogs/config.yaml ansible_collections/cloud/common/changelogs/fragments/.keep @@ -31670,6 +33117,7 @@ ansible_collections/cloud/common/tests/sanity/ignore-2.13.txt ansible_collections/cloud/common/tests/sanity/ignore-2.14.txt ansible_collections/cloud/common/tests/sanity/ignore-2.15.txt ansible_collections/cloud/common/tests/sanity/ignore-2.16.txt +ansible_collections/cloud/common/tests/sanity/ignore-2.17.txt ansible_collections/cloud/common/tests/sanity/ignore-2.9.txt ansible_collections/cloud/common/tests/unit/requirements.txt ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/conftest.py @@ -32672,15 +34120,10 @@ ansible_collections/community/aws/tests/integration/targets/wafv2_web_acl/meta/m ansible_collections/community/aws/tests/integration/targets/wafv2_web_acl/tasks/description.yml ansible_collections/community/aws/tests/integration/targets/wafv2_web_acl/tasks/main.yml ansible_collections/community/aws/tests/integration/targets/wafv2_web_acl/tasks/tags.yml -ansible_collections/community/aws/tests/sanity/ignore-2.10.txt -ansible_collections/community/aws/tests/sanity/ignore-2.11.txt -ansible_collections/community/aws/tests/sanity/ignore-2.12.txt -ansible_collections/community/aws/tests/sanity/ignore-2.13.txt ansible_collections/community/aws/tests/sanity/ignore-2.14.txt ansible_collections/community/aws/tests/sanity/ignore-2.15.txt ansible_collections/community/aws/tests/sanity/ignore-2.16.txt ansible_collections/community/aws/tests/sanity/ignore-2.17.txt -ansible_collections/community/aws/tests/sanity/ignore-2.9.txt ansible_collections/community/aws/tests/sanity/requirements.yml ansible_collections/community/aws/tests/unit/__init__.py ansible_collections/community/aws/tests/unit/constraints.txt @@ -33200,43 +34643,6 @@ ansible_collections/community/aws/tests/unit/plugins/modules/placebo_recordings/ ansible_collections/community/aws/tests/unit/plugins/modules/placebo_recordings/ec2_vpc_vpn/remove_tags/ec2.DescribeVpnConnections_7.json ansible_collections/community/aws/tests/unit/plugins/modules/placebo_recordings/ec2_vpc_vpn/remove_tags/ec2.DescribeVpnConnections_8.json ansible_collections/community/aws/tests/unit/plugins/modules/placebo_recordings/ec2_vpc_vpn/remove_tags/ec2.DescribeVpnConnections_9.json -ansible_collections/community/azure/CHANGELOG.rst -ansible_collections/community/azure/COPYING -ansible_collections/community/azure/FILES.json -ansible_collections/community/azure/MANIFEST.json -ansible_collections/community/azure/README.md -ansible_collections/community/azure/shippable.yml -ansible_collections/community/azure/.azure-pipelines/README.md -ansible_collections/community/azure/.azure-pipelines/azure-pipelines.yml -ansible_collections/community/azure/.azure-pipelines/scripts/aggregate-coverage.sh -ansible_collections/community/azure/.azure-pipelines/scripts/combine-coverage.py -ansible_collections/community/azure/.azure-pipelines/scripts/process-results.sh -ansible_collections/community/azure/.azure-pipelines/scripts/publish-codecov.sh -ansible_collections/community/azure/.azure-pipelines/scripts/report-coverage.sh -ansible_collections/community/azure/.azure-pipelines/scripts/run-tests.sh -ansible_collections/community/azure/.azure-pipelines/scripts/time-command.py -ansible_collections/community/azure/.azure-pipelines/templates/coverage.yml -ansible_collections/community/azure/.azure-pipelines/templates/matrix.yml -ansible_collections/community/azure/.azure-pipelines/templates/test.yml -ansible_collections/community/azure/changelogs/changelog.yaml -ansible_collections/community/azure/changelogs/config.yaml -ansible_collections/community/azure/changelogs/fragments/.keep -ansible_collections/community/azure/meta/action_groups.yml -ansible_collections/community/azure/meta/runtime.yml -ansible_collections/community/azure/tests/.gitignore -ansible_collections/community/azure/tests/sanity/ignore-2.10.txt -ansible_collections/community/azure/tests/sanity/ignore-2.11.txt -ansible_collections/community/azure/tests/sanity/ignore-2.12.txt -ansible_collections/community/azure/tests/sanity/ignore-2.13.txt -ansible_collections/community/azure/tests/sanity/ignore-2.14.txt -ansible_collections/community/azure/tests/utils/ado/ado.sh -ansible_collections/community/azure/tests/utils/shippable/azure.sh -ansible_collections/community/azure/tests/utils/shippable/check_matrix.py -ansible_collections/community/azure/tests/utils/shippable/cloud.sh -ansible_collections/community/azure/tests/utils/shippable/sanity.sh -ansible_collections/community/azure/tests/utils/shippable/shippable.sh -ansible_collections/community/azure/tests/utils/shippable/timing.py -ansible_collections/community/azure/tests/utils/shippable/timing.sh ansible_collections/community/ciscosmb/.gitignore ansible_collections/community/ciscosmb/CHANGELOG.rst ansible_collections/community/ciscosmb/CODE_OF_CONDUCT.md @@ -33396,8 +34802,10 @@ ansible_collections/community/crypto/plugins/filter/x509_certificate_info.py ansible_collections/community/crypto/plugins/filter/x509_crl_info.py ansible_collections/community/crypto/plugins/lookup/gpg_fingerprint.py ansible_collections/community/crypto/plugins/module_utils/_version.py +ansible_collections/community/crypto/plugins/module_utils/argspec.py ansible_collections/community/crypto/plugins/module_utils/io.py ansible_collections/community/crypto/plugins/module_utils/serial.py +ansible_collections/community/crypto/plugins/module_utils/time.py ansible_collections/community/crypto/plugins/module_utils/version.py ansible_collections/community/crypto/plugins/module_utils/acme/account.py ansible_collections/community/crypto/plugins/module_utils/acme/acme.py @@ -33444,7 +34852,10 @@ ansible_collections/community/crypto/plugins/module_utils/openssh/backends/commo ansible_collections/community/crypto/plugins/module_utils/openssh/backends/keypair_backend.py ansible_collections/community/crypto/plugins/modules/acme_account.py ansible_collections/community/crypto/plugins/modules/acme_account_info.py +ansible_collections/community/crypto/plugins/modules/acme_ari_info.py ansible_collections/community/crypto/plugins/modules/acme_certificate.py +ansible_collections/community/crypto/plugins/modules/acme_certificate_deactivate_authz.py +ansible_collections/community/crypto/plugins/modules/acme_certificate_renewal_info.py ansible_collections/community/crypto/plugins/modules/acme_certificate_revoke.py ansible_collections/community/crypto/plugins/modules/acme_challenge_cert_helper.py ansible_collections/community/crypto/plugins/modules/acme_inspect.py @@ -33507,6 +34918,17 @@ ansible_collections/community/crypto/tests/integration/targets/acme_certificate/ ansible_collections/community/crypto/tests/integration/targets/acme_certificate/tasks/main.yml ansible_collections/community/crypto/tests/integration/targets/acme_certificate/tasks/obtain-cert.yml ansible_collections/community/crypto/tests/integration/targets/acme_certificate/tests/validate.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/aliases +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/meta/main.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/impl.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/main.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tests/validate.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/aliases +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/meta/main.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/impl.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/main.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/obtain-cert.yml +ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tests/validate.yml ansible_collections/community/crypto/tests/integration/targets/acme_certificate_revoke/aliases ansible_collections/community/crypto/tests/integration/targets/acme_certificate_revoke/meta/main.yml ansible_collections/community/crypto/tests/integration/targets/acme_certificate_revoke/tasks/impl.yml @@ -33814,6 +35236,7 @@ ansible_collections/community/crypto/tests/unit/compat/__init__.py ansible_collections/community/crypto/tests/unit/compat/builtins.py ansible_collections/community/crypto/tests/unit/compat/mock.py ansible_collections/community/crypto/tests/unit/compat/unittest.py +ansible_collections/community/crypto/tests/unit/plugins/module_utils/test_time.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/backend_data.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py @@ -33824,6 +35247,14 @@ ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_o ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_utils.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.pem ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.pem.license +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt.license +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt.license +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem.license +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt +ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt.license ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/csr_1.pem ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/csr_1.pem.license ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/csr_1.pem.old @@ -33840,6 +35271,7 @@ ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtur ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/privatekey_1.txt.license ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_asn1.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_cryptography_support.py +ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_math.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_pem.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/openssh/test_certificate.py ansible_collections/community/crypto/tests/unit/plugins/module_utils/openssh/test_cryptography.py @@ -34175,7 +35607,6 @@ ansible_collections/community/dns/plugins/modules/hosttech_dns_record_info.py ansible_collections/community/dns/plugins/modules/hosttech_dns_record_set.py ansible_collections/community/dns/plugins/modules/hosttech_dns_record_set_info.py ansible_collections/community/dns/plugins/modules/hosttech_dns_record_sets.py -ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py ansible_collections/community/dns/plugins/modules/hosttech_dns_zone_info.py ansible_collections/community/dns/plugins/modules/nameserver_info.py ansible_collections/community/dns/plugins/modules/nameserver_record_info.py @@ -34299,6 +35730,7 @@ ansible_collections/community/dns/tests/unit/plugins/modules/test_wait_for_txt.p ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_ips.py ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_public_suffix.py ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_resolver.py +ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py ansible_collections/community/docker/CHANGELOG.md ansible_collections/community/docker/CHANGELOG.md.license ansible_collections/community/docker/CHANGELOG.rst @@ -34361,6 +35793,7 @@ ansible_collections/community/docker/plugins/module_utils/common_cli.py ansible_collections/community/docker/plugins/module_utils/compose_v2.py ansible_collections/community/docker/plugins/module_utils/copy.py ansible_collections/community/docker/plugins/module_utils/image_archive.py +ansible_collections/community/docker/plugins/module_utils/selectors.py ansible_collections/community/docker/plugins/module_utils/socket_handler.py ansible_collections/community/docker/plugins/module_utils/socket_helper.py ansible_collections/community/docker/plugins/module_utils/swarm.py @@ -34545,6 +35978,7 @@ ansible_collections/community/docker/tests/integration/targets/docker_image_buil ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/Dockerfile ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/EtcHostsDockerfile ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/MyDockerfile +ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/SecretsDockerfile ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/StagedDockerfile ansible_collections/community/docker/tests/integration/targets/docker_image_export/aliases ansible_collections/community/docker/tests/integration/targets/docker_image_export/meta/main.yml @@ -34927,6 +36361,7 @@ ansible_collections/community/docker/tests/unit/plugins/modules/conftest.py ansible_collections/community/docker/tests/unit/plugins/modules/test_docker_image.py ansible_collections/community/docker/tests/unit/plugins/modules/test_docker_network.py ansible_collections/community/docker/tests/unit/plugins/modules/test_docker_swarm_service.py +ansible_collections/community/docker/tests/unit/plugins/plugin_utils/test_unsafe.py ansible_collections/community/docker/tests/unit/plugins/test_support/docker_image_archive_stubbing.py ansible_collections/community/docker/tests/utils/constraints.txt ansible_collections/community/docker/tests/utils/shippable/alpine.sh @@ -35049,6 +36484,7 @@ ansible_collections/community/general/plugins/become/machinectl.py ansible_collections/community/general/plugins/become/pbrun.py ansible_collections/community/general/plugins/become/pfexec.py ansible_collections/community/general/plugins/become/pmrun.py +ansible_collections/community/general/plugins/become/run0.py ansible_collections/community/general/plugins/become/sesu.py ansible_collections/community/general/plugins/become/sudosu.py ansible_collections/community/general/plugins/cache/memcached.py @@ -35079,6 +36515,7 @@ ansible_collections/community/general/plugins/callback/slack.py ansible_collections/community/general/plugins/callback/splunk.py ansible_collections/community/general/plugins/callback/sumologic.py ansible_collections/community/general/plugins/callback/syslog_json.py +ansible_collections/community/general/plugins/callback/timestamp.py ansible_collections/community/general/plugins/callback/unixy.py ansible_collections/community/general/plugins/callback/yaml.py ansible_collections/community/general/plugins/connection/chroot.py @@ -35098,6 +36535,7 @@ ansible_collections/community/general/plugins/doc_fragments/bitbucket.py ansible_collections/community/general/plugins/doc_fragments/consul.py ansible_collections/community/general/plugins/doc_fragments/dimensiondata.py ansible_collections/community/general/plugins/doc_fragments/dimensiondata_wait.py +ansible_collections/community/general/plugins/doc_fragments/django.py ansible_collections/community/general/plugins/doc_fragments/emc.py ansible_collections/community/general/plugins/doc_fragments/gitlab.py ansible_collections/community/general/plugins/doc_fragments/hpe3par.py @@ -35124,7 +36562,6 @@ ansible_collections/community/general/plugins/doc_fragments/oracle_wait_options. ansible_collections/community/general/plugins/doc_fragments/pritunl.py ansible_collections/community/general/plugins/doc_fragments/proxmox.py ansible_collections/community/general/plugins/doc_fragments/purestorage.py -ansible_collections/community/general/plugins/doc_fragments/rackspace.py ansible_collections/community/general/plugins/doc_fragments/redis.py ansible_collections/community/general/plugins/doc_fragments/rundeck.py ansible_collections/community/general/plugins/doc_fragments/scaleway.py @@ -35224,11 +36661,13 @@ ansible_collections/community/general/plugins/module_utils/database.py ansible_collections/community/general/plugins/module_utils/datetime.py ansible_collections/community/general/plugins/module_utils/deps.py ansible_collections/community/general/plugins/module_utils/dimensiondata.py +ansible_collections/community/general/plugins/module_utils/django.py ansible_collections/community/general/plugins/module_utils/gandi_livedns_api.py ansible_collections/community/general/plugins/module_utils/gconftool2.py ansible_collections/community/general/plugins/module_utils/gio_mime.py ansible_collections/community/general/plugins/module_utils/gitlab.py ansible_collections/community/general/plugins/module_utils/heroku.py +ansible_collections/community/general/plugins/module_utils/homebrew.py ansible_collections/community/general/plugins/module_utils/hwc_utils.py ansible_collections/community/general/plugins/module_utils/ibm_sa_utils.py ansible_collections/community/general/plugins/module_utils/ilo_redfish_utils.py @@ -35253,7 +36692,7 @@ ansible_collections/community/general/plugins/module_utils/pipx.py ansible_collections/community/general/plugins/module_utils/proxmox.py ansible_collections/community/general/plugins/module_utils/puppet.py ansible_collections/community/general/plugins/module_utils/pure.py -ansible_collections/community/general/plugins/module_utils/rax.py +ansible_collections/community/general/plugins/module_utils/python_runner.py ansible_collections/community/general/plugins/module_utils/redfish_utils.py ansible_collections/community/general/plugins/module_utils/redhat.py ansible_collections/community/general/plugins/module_utils/redis.py @@ -35363,6 +36802,7 @@ ansible_collections/community/general/plugins/modules/deploy_helper.py ansible_collections/community/general/plugins/modules/dimensiondata_network.py ansible_collections/community/general/plugins/modules/dimensiondata_vlan.py ansible_collections/community/general/plugins/modules/discord.py +ansible_collections/community/general/plugins/modules/django_command.py ansible_collections/community/general/plugins/modules/django_manage.py ansible_collections/community/general/plugins/modules/dnf_config_manager.py ansible_collections/community/general/plugins/modules/dnf_versionlock.py @@ -35381,7 +36821,6 @@ ansible_collections/community/general/plugins/modules/filesize.py ansible_collections/community/general/plugins/modules/filesystem.py ansible_collections/community/general/plugins/modules/flatpak.py ansible_collections/community/general/plugins/modules/flatpak_remote.py -ansible_collections/community/general/plugins/modules/flowdock.py ansible_collections/community/general/plugins/modules/gandi_livedns.py ansible_collections/community/general/plugins/modules/gconftool2.py ansible_collections/community/general/plugins/modules/gconftool2_info.py @@ -35713,32 +37152,6 @@ ansible_collections/community/general/plugins/modules/puppet.py ansible_collections/community/general/plugins/modules/pushbullet.py ansible_collections/community/general/plugins/modules/pushover.py ansible_collections/community/general/plugins/modules/python_requirements_info.py -ansible_collections/community/general/plugins/modules/rax.py -ansible_collections/community/general/plugins/modules/rax_cbs.py -ansible_collections/community/general/plugins/modules/rax_cbs_attachments.py -ansible_collections/community/general/plugins/modules/rax_cdb.py -ansible_collections/community/general/plugins/modules/rax_cdb_database.py -ansible_collections/community/general/plugins/modules/rax_cdb_user.py -ansible_collections/community/general/plugins/modules/rax_clb.py -ansible_collections/community/general/plugins/modules/rax_clb_nodes.py -ansible_collections/community/general/plugins/modules/rax_clb_ssl.py -ansible_collections/community/general/plugins/modules/rax_dns.py -ansible_collections/community/general/plugins/modules/rax_dns_record.py -ansible_collections/community/general/plugins/modules/rax_facts.py -ansible_collections/community/general/plugins/modules/rax_files.py -ansible_collections/community/general/plugins/modules/rax_files_objects.py -ansible_collections/community/general/plugins/modules/rax_identity.py -ansible_collections/community/general/plugins/modules/rax_keypair.py -ansible_collections/community/general/plugins/modules/rax_meta.py -ansible_collections/community/general/plugins/modules/rax_mon_alarm.py -ansible_collections/community/general/plugins/modules/rax_mon_check.py -ansible_collections/community/general/plugins/modules/rax_mon_entity.py -ansible_collections/community/general/plugins/modules/rax_mon_notification.py -ansible_collections/community/general/plugins/modules/rax_mon_notification_plan.py -ansible_collections/community/general/plugins/modules/rax_network.py -ansible_collections/community/general/plugins/modules/rax_queue.py -ansible_collections/community/general/plugins/modules/rax_scaling_group.py -ansible_collections/community/general/plugins/modules/rax_scaling_policy.py ansible_collections/community/general/plugins/modules/read_csv.py ansible_collections/community/general/plugins/modules/redfish_command.py ansible_collections/community/general/plugins/modules/redfish_config.py @@ -35819,7 +37232,6 @@ ansible_collections/community/general/plugins/modules/spectrum_model_attrs.py ansible_collections/community/general/plugins/modules/spotinst_aws_elastigroup.py ansible_collections/community/general/plugins/modules/ss_3par_cpg.py ansible_collections/community/general/plugins/modules/ssh_config.py -ansible_collections/community/general/plugins/modules/stackdriver.py ansible_collections/community/general/plugins/modules/stacki_host.py ansible_collections/community/general/plugins/modules/statsd.py ansible_collections/community/general/plugins/modules/statusio_maintenance.py @@ -35873,11 +37285,6 @@ ansible_collections/community/general/plugins/modules/vmadm.py ansible_collections/community/general/plugins/modules/wakeonlan.py ansible_collections/community/general/plugins/modules/wdc_redfish_command.py ansible_collections/community/general/plugins/modules/wdc_redfish_info.py -ansible_collections/community/general/plugins/modules/webfaction_app.py -ansible_collections/community/general/plugins/modules/webfaction_db.py -ansible_collections/community/general/plugins/modules/webfaction_domain.py -ansible_collections/community/general/plugins/modules/webfaction_mailbox.py -ansible_collections/community/general/plugins/modules/webfaction_site.py ansible_collections/community/general/plugins/modules/xattr.py ansible_collections/community/general/plugins/modules/xbps.py ansible_collections/community/general/plugins/modules/xcc_redfish_command.py @@ -35974,6 +37381,8 @@ ansible_collections/community/general/tests/integration/targets/callback_diy/tas ansible_collections/community/general/tests/integration/targets/callback_log_plays/aliases ansible_collections/community/general/tests/integration/targets/callback_log_plays/ping_log.yml ansible_collections/community/general/tests/integration/targets/callback_log_plays/runme.sh +ansible_collections/community/general/tests/integration/targets/callback_timestamp/aliases +ansible_collections/community/general/tests/integration/targets/callback_timestamp/tasks/main.yml ansible_collections/community/general/tests/integration/targets/callback_yaml/aliases ansible_collections/community/general/tests/integration/targets/callback_yaml/tasks/main.yml ansible_collections/community/general/tests/integration/targets/cargo/aliases @@ -36269,7 +37678,9 @@ ansible_collections/community/general/tests/integration/targets/hg/tasks/main.ym ansible_collections/community/general/tests/integration/targets/hg/tasks/run-tests.yml ansible_collections/community/general/tests/integration/targets/hg/tasks/uninstall.yml ansible_collections/community/general/tests/integration/targets/homebrew/aliases +ansible_collections/community/general/tests/integration/targets/homebrew/handlers/main.yml ansible_collections/community/general/tests/integration/targets/homebrew/tasks/casks.yml +ansible_collections/community/general/tests/integration/targets/homebrew/tasks/docker.yml ansible_collections/community/general/tests/integration/targets/homebrew/tasks/formulae.yml ansible_collections/community/general/tests/integration/targets/homebrew/tasks/main.yml ansible_collections/community/general/tests/integration/targets/homebrew_cask/aliases @@ -36554,6 +37965,8 @@ ansible_collections/community/general/tests/integration/targets/lookup_merge_var ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/runme.sh ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test.yml ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_all_hosts.yml +ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_inventory.yml +ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_play.yml ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_inventory_all_hosts.yml ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_with_env.yml ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/vars.yml @@ -37296,6 +38709,7 @@ ansible_collections/community/general/tests/unit/plugins/become/test_dzdo.py ansible_collections/community/general/tests/unit/plugins/become/test_ksu.py ansible_collections/community/general/tests/unit/plugins/become/test_pbrun.py ansible_collections/community/general/tests/unit/plugins/become/test_pfexec.py +ansible_collections/community/general/tests/unit/plugins/become/test_run0.py ansible_collections/community/general/tests/unit/plugins/become/test_sudosu.py ansible_collections/community/general/tests/unit/plugins/cache/test_memcached.py ansible_collections/community/general/tests/unit/plugins/cache/test_redis.py @@ -37356,6 +38770,7 @@ ansible_collections/community/general/tests/unit/plugins/module_utils/test_modul ansible_collections/community/general/tests/unit/plugins/module_utils/test_ocapi_utils.py ansible_collections/community/general/tests/unit/plugins/module_utils/test_onepassword.py ansible_collections/community/general/tests/unit/plugins/module_utils/test_opennebula.py +ansible_collections/community/general/tests/unit/plugins/module_utils/test_python_runner.py ansible_collections/community/general/tests/unit/plugins/module_utils/test_saslprep.py ansible_collections/community/general/tests/unit/plugins/module_utils/test_utm_utils.py ansible_collections/community/general/tests/unit/plugins/module_utils/test_vardict.py @@ -37415,6 +38830,8 @@ ansible_collections/community/general/tests/unit/plugins/modules/test_cpanm.yaml ansible_collections/community/general/tests/unit/plugins/modules/test_datadog_downtime.py.disabled ansible_collections/community/general/tests/unit/plugins/modules/test_dconf.py ansible_collections/community/general/tests/unit/plugins/modules/test_discord.py +ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.py +ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.yaml ansible_collections/community/general/tests/unit/plugins/modules/test_dnf_config_manager.py ansible_collections/community/general/tests/unit/plugins/modules/test_dnsimple.py ansible_collections/community/general/tests/unit/plugins/modules/test_dnsimple_info.py @@ -37976,6 +39393,7 @@ ansible_collections/community/general/tests/unit/plugins/modules/interfaces_file ansible_collections/community/general/tests/unit/plugins/modules/interfaces_file/interfaces_file_fixtures/input/servers.com.license ansible_collections/community/general/tests/unit/plugins/modules/interfaces_file/interfaces_file_fixtures/input/up_down_dup ansible_collections/community/general/tests/unit/plugins/modules/interfaces_file/interfaces_file_fixtures/input/up_down_dup.license +ansible_collections/community/general/tests/unit/plugins/plugin_utils/test_unsafe.py ansible_collections/community/general/tests/utils/constraints.txt ansible_collections/community/general/tests/utils/shippable/aix.sh ansible_collections/community/general/tests/utils/shippable/alpine.sh @@ -38063,6 +39481,16 @@ ansible_collections/community/grafana/changelogs/fragments/345-datasource-compar ansible_collections/community/grafana/changelogs/fragments/347-folder-for-orgs.yml ansible_collections/community/grafana/changelogs/fragments/349-role-notification-channel.yml ansible_collections/community/grafana/changelogs/fragments/350-python3.12.yml +ansible_collections/community/grafana/changelogs/fragments/353-docs-add-influxdb-flux-example.yml +ansible_collections/community/grafana/changelogs/fragments/354-fix-find-grafana-versions.yml +ansible_collections/community/grafana/changelogs/fragments/355-rm-dashboard-message-argument.yml +ansible_collections/community/grafana/changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml +ansible_collections/community/grafana/changelogs/fragments/357-module-grafana-silence.yml +ansible_collections/community/grafana/changelogs/fragments/358-role-grafana-silence.yml +ansible_collections/community/grafana/changelogs/fragments/362-plugin-umask.yml +ansible_collections/community/grafana/changelogs/fragments/364-first-datasource-default.yml +ansible_collections/community/grafana/changelogs/fragments/367-dashboard-undo-breaing-change-message.yml +ansible_collections/community/grafana/changelogs/fragments/368-molecule-pin-requests.yml ansible_collections/community/grafana/changelogs/fragments/add-units-datasource.yml ansible_collections/community/grafana/changelogs/fragments/ci.yml ansible_collections/community/grafana/changelogs/fragments/datasource-issue-204.yml @@ -38097,6 +39525,7 @@ ansible_collections/community/grafana/plugins/modules/grafana_notification_chann ansible_collections/community/grafana/plugins/modules/grafana_organization.py ansible_collections/community/grafana/plugins/modules/grafana_organization_user.py ansible_collections/community/grafana/plugins/modules/grafana_plugin.py +ansible_collections/community/grafana/plugins/modules/grafana_silence.py ansible_collections/community/grafana/plugins/modules/grafana_team.py ansible_collections/community/grafana/plugins/modules/grafana_user.py ansible_collections/community/grafana/roles/grafana/README.md @@ -38173,6 +39602,10 @@ ansible_collections/community/grafana/tests/integration/targets/grafana_organiza ansible_collections/community/grafana/tests/integration/targets/grafana_organization_user/site.yml ansible_collections/community/grafana/tests/integration/targets/grafana_organization_user/defaults/main.yml ansible_collections/community/grafana/tests/integration/targets/grafana_organization_user/tasks/main.yml +ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh +ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml +ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml +ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml ansible_collections/community/grafana/tests/integration/targets/grafana_team/runme.sh ansible_collections/community/grafana/tests/integration/targets/grafana_team/site.yml ansible_collections/community/grafana/tests/integration/targets/grafana_team/defaults/main.yml @@ -38190,9 +39623,11 @@ ansible_collections/community/grafana/tests/sanity/ignore-2.14.txt ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt ansible_collections/community/grafana/tests/sanity/ignore-2.17.txt +ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt ansible_collections/community/grafana/tests/sanity/ignore-2.9.txt ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_datasource/test_grafana_datasource.py ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py +ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_team/test_grafana_team.py ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_user/test_grafana_user.py ansible_collections/community/hashi_vault/.git-blame-ignore-revs @@ -40715,9 +42150,16 @@ ansible_collections/community/okd/README.md ansible_collections/community/okd/codecov.yml ansible_collections/community/okd/requirements.txt ansible_collections/community/okd/requirements.yml -ansible_collections/community/okd/setup.cfg ansible_collections/community/okd/test-requirements.txt -ansible_collections/community/okd/changelogs/.plugin-cache.yaml +ansible_collections/community/okd/tox.ini +ansible_collections/community/okd/.config/ansible-lint.yml +ansible_collections/community/okd/.github/patchback.yml +ansible_collections/community/okd/.github/settings.yml +ansible_collections/community/okd/.github/stale.yml +ansible_collections/community/okd/.github/workflows/changelog.yml +ansible_collections/community/okd/.github/workflows/linters.yml +ansible_collections/community/okd/.github/workflows/sanity-tests.yml +ansible_collections/community/okd/.github/workflows/unit-tests.yml ansible_collections/community/okd/changelogs/changelog.yaml ansible_collections/community/okd/changelogs/config.yaml ansible_collections/community/okd/ci/Dockerfile @@ -40818,7 +42260,10 @@ ansible_collections/community/okd/tests/sanity/ignore-2.12.txt ansible_collections/community/okd/tests/sanity/ignore-2.13.txt ansible_collections/community/okd/tests/sanity/ignore-2.14.txt ansible_collections/community/okd/tests/sanity/ignore-2.15.txt +ansible_collections/community/okd/tests/sanity/ignore-2.16.txt +ansible_collections/community/okd/tests/sanity/ignore-2.17.txt ansible_collections/community/okd/tests/sanity/ignore-2.9.txt +ansible_collections/community/okd/tests/sanity/requirements.yml ansible_collections/community/okd/tests/unit/requirements.txt ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_dn.py ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_sync_config.py @@ -41064,6 +42509,7 @@ ansible_collections/community/postgresql/tests/sanity/ignore-2.14.txt ansible_collections/community/postgresql/tests/sanity/ignore-2.15.txt ansible_collections/community/postgresql/tests/sanity/ignore-2.16.txt ansible_collections/community/postgresql/tests/sanity/ignore-2.17.txt +ansible_collections/community/postgresql/tests/sanity/ignore-2.18.txt ansible_collections/community/postgresql/tests/sanity/extra/no-unwanted-files.json ansible_collections/community/postgresql/tests/sanity/extra/no-unwanted-files.py ansible_collections/community/postgresql/tests/unit/plugins/module_utils/__init__.py @@ -41548,59 +42994,6 @@ ansible_collections/community/routeros/tests/unit/plugins/modules/fixtures/facts ansible_collections/community/routeros/tests/unit/plugins/modules/fixtures/facts/system_resource_print_without-paging.license ansible_collections/community/routeros/tests/unit/plugins/modules/fixtures/facts/system_routerboard_print_without-paging ansible_collections/community/routeros/tests/unit/plugins/modules/fixtures/facts/system_routerboard_print_without-paging.license -ansible_collections/community/sap/CHANGELOG.rst -ansible_collections/community/sap/CODE_OF_CONDUCT.md -ansible_collections/community/sap/CONTRIBUTING.md -ansible_collections/community/sap/FILES.json -ansible_collections/community/sap/LICENSE -ansible_collections/community/sap/MAINTAINERS -ansible_collections/community/sap/MAINTAINING.md -ansible_collections/community/sap/MANIFEST.json -ansible_collections/community/sap/README.md -ansible_collections/community/sap/REVIEW_CHECKLIST.md -ansible_collections/community/sap/codecov.yml -ansible_collections/community/sap/.github/ISSUE_TEMPLATE/bug_report.yml -ansible_collections/community/sap/.github/ISSUE_TEMPLATE/config.yml -ansible_collections/community/sap/.github/ISSUE_TEMPLATE/documentation_report.yml -ansible_collections/community/sap/.github/ISSUE_TEMPLATE/feature_request.yml -ansible_collections/community/sap/.github/workflows/ansible-test.yml -ansible_collections/community/sap/.vscode/extensions.json -ansible_collections/community/sap/changelogs/changelog.yaml -ansible_collections/community/sap/changelogs/config.yaml -ansible_collections/community/sap/changelogs/fragments/.keep -ansible_collections/community/sap/meta/runtime.yml -ansible_collections/community/sap/plugins/doc_fragments/__init__.py -ansible_collections/community/sap/plugins/module_utils/__init__.py -ansible_collections/community/sap/plugins/modules/__init__.py -ansible_collections/community/sap/tests/integration/__init__.py -ansible_collections/community/sap/tests/integration/targets/__init__.py -ansible_collections/community/sap/tests/sanity/__init__.py -ansible_collections/community/sap/tests/unit/__init__.py -ansible_collections/community/sap/tests/unit/requirements.txt -ansible_collections/community/sap/tests/unit/compat/__init__.py -ansible_collections/community/sap/tests/unit/compat/builtins.py -ansible_collections/community/sap/tests/unit/compat/mock.py -ansible_collections/community/sap/tests/unit/compat/unittest.py -ansible_collections/community/sap/tests/unit/mock/__init__.py -ansible_collections/community/sap/tests/unit/mock/loader.py -ansible_collections/community/sap/tests/unit/mock/path.py -ansible_collections/community/sap/tests/unit/mock/procenv.py -ansible_collections/community/sap/tests/unit/mock/vault_helper.py -ansible_collections/community/sap/tests/unit/mock/yaml_helper.py -ansible_collections/community/sap/tests/unit/plugins/__init__.py -ansible_collections/community/sap/tests/unit/plugins/modules/__init__.py -ansible_collections/community/sap/tests/unit/plugins/modules/utils.py -ansible_collections/community/sap/tests/unit/plugins/modules/database/__init__.py -ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/__init__.py -ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/test_hana_query.py -ansible_collections/community/sap/tests/unit/plugins/modules/files/__init__.py -ansible_collections/community/sap/tests/unit/plugins/modules/files/test_sapcar_extract.py -ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_company.py -ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_user.py -ansible_collections/community/sap/tests/unit/plugins/modules/system/__init__.py -ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_snote.py -ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_system_facts.py -ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_task_list_execute.py ansible_collections/community/sap_libs/CHANGELOG.rst ansible_collections/community/sap_libs/CODE_OF_CONDUCT.md ansible_collections/community/sap_libs/CONTRIBUTING.md @@ -43383,6 +44776,7 @@ ansible_collections/community/zabbix/plugins/modules/zabbix_action.py ansible_collections/community/zabbix/plugins/modules/zabbix_api_info.py ansible_collections/community/zabbix/plugins/modules/zabbix_authentication.py ansible_collections/community/zabbix/plugins/modules/zabbix_autoregister.py +ansible_collections/community/zabbix/plugins/modules/zabbix_correlation.py ansible_collections/community/zabbix/plugins/modules/zabbix_discovery_rule.py ansible_collections/community/zabbix/plugins/modules/zabbix_globalmacro.py ansible_collections/community/zabbix/plugins/modules/zabbix_group.py @@ -43401,6 +44795,7 @@ ansible_collections/community/zabbix/plugins/modules/zabbix_proxy_info.py ansible_collections/community/zabbix/plugins/modules/zabbix_regexp.py ansible_collections/community/zabbix/plugins/modules/zabbix_script.py ansible_collections/community/zabbix/plugins/modules/zabbix_service.py +ansible_collections/community/zabbix/plugins/modules/zabbix_service_info.py ansible_collections/community/zabbix/plugins/modules/zabbix_settings.py ansible_collections/community/zabbix/plugins/modules/zabbix_template.py ansible_collections/community/zabbix/plugins/modules/zabbix_template_info.py @@ -43491,9 +44886,9 @@ ansible_collections/community/zabbix/roles/zabbix_server/handlers/main.yml ansible_collections/community/zabbix/roles/zabbix_server/meta/main.yml ansible_collections/community/zabbix/roles/zabbix_server/tasks/Debian.yml ansible_collections/community/zabbix/roles/zabbix_server/tasks/RedHat.yml +ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-mysql.yml +ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-pgsql.yml ansible_collections/community/zabbix/roles/zabbix_server/tasks/main.yml -ansible_collections/community/zabbix/roles/zabbix_server/tasks/mysql.yml -ansible_collections/community/zabbix/roles/zabbix_server/tasks/postgresql.yml ansible_collections/community/zabbix/roles/zabbix_server/tasks/scripts.yml ansible_collections/community/zabbix/roles/zabbix_server/tasks/selinux.yml ansible_collections/community/zabbix/roles/zabbix_server/templates/zabbix_server.conf.j2 @@ -43529,6 +44924,8 @@ ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_authe ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_authentication/tasks/zabbix_authentication_tests.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_autoregister/meta/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_autoregister/tasks/main.yml +ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/meta/main.yml +ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/tasks/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_discovery_rule/meta/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_discovery_rule/tasks/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_globalmacro/meta/main.yml @@ -43569,6 +44966,8 @@ ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_scrip ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service/defaults/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service/meta/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service/tasks/main.yml +ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/meta/main.yml +ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/tasks/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_settings/meta/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_settings/tasks/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/defaults/main.yml @@ -43578,6 +44977,9 @@ ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_templ ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template3-changed_54_higher.json ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template3_54_higher.json ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template3_54_higher.xml +ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.json +ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.xml +ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.yaml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/meta/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/tasks/main.yml ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template_info/defaults/main.yml @@ -44818,6 +46220,7 @@ ansible_collections/dellemc/openmanage/changelogs/.plugin-cache.yaml ansible_collections/dellemc/openmanage/changelogs/changelog.yaml ansible_collections/dellemc/openmanage/changelogs/config.yaml ansible_collections/dellemc/openmanage/docs/ADDITIONAL_INFORMATION.md +ansible_collections/dellemc/openmanage/docs/ATTRIBUTION.md ansible_collections/dellemc/openmanage/docs/BRANCHING.md ansible_collections/dellemc/openmanage/docs/CODE_OF_CONDUCT.md ansible_collections/dellemc/openmanage/docs/COMMITTER_GUIDE.md @@ -44839,6 +46242,7 @@ ansible_collections/dellemc/openmanage/docs/modules/idrac_attributes.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_bios.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_boot.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_certificates.rst +ansible_collections/dellemc/openmanage/docs/modules/idrac_diagnostics.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_firmware.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_firmware_info.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_license.rst @@ -44852,6 +46256,8 @@ ansible_collections/dellemc/openmanage/docs/modules/idrac_os_deployment.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_redfish_storage_controller.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_reset.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_server_config_profile.rst +ansible_collections/dellemc/openmanage/docs/modules/idrac_session.rst +ansible_collections/dellemc/openmanage/docs/modules/idrac_storage_volume.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_syslog.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_system_info.rst ansible_collections/dellemc/openmanage/docs/modules/idrac_timezone_ntp.rst @@ -44923,12 +46329,12 @@ ansible_collections/dellemc/openmanage/docs/modules/redfish_powerstate.rst ansible_collections/dellemc/openmanage/docs/modules/redfish_storage_volume.rst ansible_collections/dellemc/openmanage/meta/execution-environment.yml ansible_collections/dellemc/openmanage/meta/runtime.yml -ansible_collections/dellemc/openmanage/playbooks/idrac/dellemc_idrac_storage_volume.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_attributes.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_bios.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_boot.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_boot_virtual_media_workflow.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_certificates.yml +ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_diagnostics.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_firmware.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_firmware_info.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_license.yml @@ -44943,6 +46349,8 @@ ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_redfish_storage_con ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset_result_tracking.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_server_config_profile.yml +ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_session.yml +ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_storage_volume.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_syslog.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_system_info.yml ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_user.yml @@ -45060,6 +46468,7 @@ ansible_collections/dellemc/openmanage/playbooks/roles/idrac_os_deployment/idrac ansible_collections/dellemc/openmanage/playbooks/roles/idrac_reset/idrac_reset.yml ansible_collections/dellemc/openmanage/playbooks/roles/idrac_server_powerstate/idrac_server_powerstate.yml ansible_collections/dellemc/openmanage/playbooks/roles/idrac_storage_controller/idrac_storage_controller.yml +ansible_collections/dellemc/openmanage/playbooks/roles/idrac_user/idrac_user.yml ansible_collections/dellemc/openmanage/playbooks/roles/redfish_firmware/redfish_firmware.yml ansible_collections/dellemc/openmanage/playbooks/roles/redfish_storage_volume/redfish_storage_volume.yml ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/attributes.yml @@ -45073,6 +46482,7 @@ ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/osd.yml ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/reset.yml ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/storage.yml ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/storage_controller.yml +ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/user.yml ansible_collections/dellemc/openmanage/plugins/README.md ansible_collections/dellemc/openmanage/plugins/doc_fragments/__init__.py ansible_collections/dellemc/openmanage/plugins/doc_fragments/idrac_auth_options.py @@ -45087,6 +46497,7 @@ ansible_collections/dellemc/openmanage/plugins/module_utils/dellemc_idrac.py ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_redfish.py ansible_collections/dellemc/openmanage/plugins/module_utils/ome.py ansible_collections/dellemc/openmanage/plugins/module_utils/redfish.py +ansible_collections/dellemc/openmanage/plugins/module_utils/session_utils.py ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py ansible_collections/dellemc/openmanage/plugins/modules/__init__.py ansible_collections/dellemc/openmanage/plugins/modules/dellemc_configure_idrac_eventing.py @@ -45098,6 +46509,7 @@ ansible_collections/dellemc/openmanage/plugins/modules/idrac_attributes.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_bios.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_boot.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_certificates.py +ansible_collections/dellemc/openmanage/plugins/modules/idrac_diagnostics.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_firmware.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_firmware_info.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_license.py @@ -45111,6 +46523,8 @@ ansible_collections/dellemc/openmanage/plugins/modules/idrac_os_deployment.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_redfish_storage_controller.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_reset.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_server_config_profile.py +ansible_collections/dellemc/openmanage/plugins/modules/idrac_session.py +ansible_collections/dellemc/openmanage/plugins/modules/idrac_storage_volume.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_syslog.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_system_info.py ansible_collections/dellemc/openmanage/plugins/modules/idrac_timezone_ntp.py @@ -45426,7 +46840,6 @@ ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tasks/get_voltag ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tasks/main.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/inventory ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/test.yml -ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/backplane_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/controller_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/cpu_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/enclosure_assert.yml @@ -45442,7 +46855,6 @@ ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/mm ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/nic_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/passensor_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/pciedevice_assert.yml -ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/powersupply_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/psmetrics_assert.yml ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/secureboot_assert.yml @@ -45458,24 +46870,18 @@ ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/ ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/meta/main.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/molecule.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/molecule.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/prepare.yml @@ -45484,11 +46890,13 @@ ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/ ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_xml/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml -ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml +ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml +ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml +ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml +ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/tasks/main.yml ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/tests/inventory ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/tests/test.yml @@ -45591,6 +46999,37 @@ ansible_collections/dellemc/openmanage/roles/idrac_storage_controller/tasks/main ansible_collections/dellemc/openmanage/roles/idrac_storage_controller/tests/inventory ansible_collections/dellemc/openmanage/roles/idrac_storage_controller/tests/test.yml ansible_collections/dellemc/openmanage/roles/idrac_storage_controller/vars/main.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/README.md +ansible_collections/dellemc/openmanage/roles/idrac_user/defaults/main.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/handlers/main.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/meta/argument_specs.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/meta/main.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/converge.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/molecule.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/converge.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/molecule.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/converge.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/molecule.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/converge.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/molecule.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/prepare.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/converge.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/molecule.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/prepare.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/converge.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/molecule.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/prepare.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/converge.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/molecule.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/cleanup.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/absent.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/get_user.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/main.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/present.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/tests/inventory +ansible_collections/dellemc/openmanage/roles/idrac_user/tests/test.yml +ansible_collections/dellemc/openmanage/roles/idrac_user/vars/main.yml ansible_collections/dellemc/openmanage/roles/redfish_firmware/README.md ansible_collections/dellemc/openmanage/roles/redfish_firmware/defaults/main.yml ansible_collections/dellemc/openmanage/roles/redfish_firmware/handlers/main.yml @@ -45611,10 +47050,12 @@ ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/defaults/mai ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/handlers/main.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/meta/argument_specs.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/meta/main.yml +ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__create_virtual_drive.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__delete_virtual_drive.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__extract_storage.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__get_helper.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__idrac_reset.yml +ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__job_track.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__lc_status.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/RAID0/converge.yml ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/RAID0/molecule.yml @@ -45657,6 +47098,7 @@ ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/__init__. ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_idrac_redfish.py ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_ome.py ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_redfish.py +ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_session_utils.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/__init__.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/common.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/conftest.py @@ -45669,6 +47111,7 @@ ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_att ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_bios.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_boot.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_certificates.py +ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_diagnostics.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_firmware.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_firmware_info.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_license.py @@ -45682,6 +47125,8 @@ ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_os_ ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_redfish_storage_controller.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_reset.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_server_config_profile.py +ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_session.py +ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_storage_volume.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_syslog.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_system_info.py ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_timezone_ntp.py @@ -46043,6 +47488,7 @@ ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.14.txt ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.15.txt ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.16.txt ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.17.txt +ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.18.txt ansible_collections/dellemc/powerflex/tests/unit/__init__.py ansible_collections/dellemc/powerflex/tests/unit/requirements.txt ansible_collections/dellemc/powerflex/tests/unit/plugins/__init__.py @@ -46172,10 +47618,11 @@ ansible_collections/dellemc/unity/plugins/modules/storagepool.py ansible_collections/dellemc/unity/plugins/modules/tree_quota.py ansible_collections/dellemc/unity/plugins/modules/user_quota.py ansible_collections/dellemc/unity/plugins/modules/volume.py -ansible_collections/dellemc/unity/tests/requirements.txt -ansible_collections/dellemc/unity/tests/sanity/ignore-2.13.txt ansible_collections/dellemc/unity/tests/sanity/ignore-2.14.txt ansible_collections/dellemc/unity/tests/sanity/ignore-2.15.txt +ansible_collections/dellemc/unity/tests/sanity/ignore-2.16.txt +ansible_collections/dellemc/unity/tests/sanity/ignore-2.17.txt +ansible_collections/dellemc/unity/tests/unit/requirements.txt ansible_collections/dellemc/unity/tests/unit/plugins/module_utils/mock_api_exception.py ansible_collections/dellemc/unity/tests/unit/plugins/module_utils/mock_cifsserver_api.py ansible_collections/dellemc/unity/tests/unit/plugins/module_utils/mock_consistencygroup_api.py @@ -46431,6 +47878,7 @@ ansible_collections/fortinet/fortimanager/changelogs/fragments/2.2.1.yml ansible_collections/fortinet/fortimanager/changelogs/fragments/2.3.0.yml ansible_collections/fortinet/fortimanager/changelogs/fragments/2.3.1.yml ansible_collections/fortinet/fortimanager/changelogs/fragments/2.4.0.yml +ansible_collections/fortinet/fortimanager/changelogs/fragments/2.5.0.yml ansible_collections/fortinet/fortimanager/meta/runtime.yml ansible_collections/fortinet/fortimanager/plugins/README.md ansible_collections/fortinet/fortimanager/plugins/httpapi/fortimanager.py @@ -47625,7 +49073,6 @@ ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile_radio2 ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile_radio3.py ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile_radio4.py ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile_splittunnelingacl.py -ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.14.txt ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.15.txt ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.16.txt ansible_collections/fortinet/fortios/CHANGELOG.rst @@ -48408,22 +49855,6 @@ ansible_collections/frr/frr/tests/unit/modules/network/frr/fixtures/frr_bgp_conf ansible_collections/frr/frr/tests/unit/modules/network/frr/fixtures/frr_facts_show_interface ansible_collections/frr/frr/tests/unit/modules/network/frr/fixtures/frr_facts_show_memory ansible_collections/frr/frr/tests/unit/modules/network/frr/fixtures/frr_facts_show_version -ansible_collections/gluster/gluster/.gitignore -ansible_collections/gluster/gluster/CHANGELOG.rst -ansible_collections/gluster/gluster/FILES.json -ansible_collections/gluster/gluster/LICENSE -ansible_collections/gluster/gluster/MANIFEST.json -ansible_collections/gluster/gluster/README.md -ansible_collections/gluster/gluster/.github/workflows/ansible-test-plugins.yml -ansible_collections/gluster/gluster/changelogs/changelog.yaml -ansible_collections/gluster/gluster/changelogs/config.yaml -ansible_collections/gluster/gluster/meta/runtime.yml -ansible_collections/gluster/gluster/plugins/modules/geo_rep.py -ansible_collections/gluster/gluster/plugins/modules/gluster_heal_info.py -ansible_collections/gluster/gluster/plugins/modules/gluster_peer.py -ansible_collections/gluster/gluster/plugins/modules/gluster_volume.py -ansible_collections/gluster/gluster/tests/sanity/ignore-2.10.txt -ansible_collections/gluster/gluster/tests/sanity/ignore-2.11.txt ansible_collections/google/cloud/.ansible-lint ansible_collections/google/cloud/.gitignore ansible_collections/google/cloud/.gitmodules @@ -49130,7 +50561,10 @@ ansible_collections/grafana/grafana/.config/molecule/config.yml ansible_collections/grafana/grafana/.github/dependabot.yml ansible_collections/grafana/grafana/.github/workflows/full-integration-test.yml ansible_collections/grafana/grafana/.github/workflows/lint.yaml +ansible_collections/grafana/grafana/.github/workflows/loki-molecule.yml +ansible_collections/grafana/grafana/.github/workflows/mimir-molecule.yml ansible_collections/grafana/grafana/.github/workflows/modules-test.yml +ansible_collections/grafana/grafana/.github/workflows/promtail-molecule.yml ansible_collections/grafana/grafana/.github/workflows/release.yml ansible_collections/grafana/grafana/.github/workflows/roles-test.yml ansible_collections/grafana/grafana/changelogs/.plugin-cache.yaml @@ -49138,8 +50572,15 @@ ansible_collections/grafana/grafana/changelogs/changelog.yaml ansible_collections/grafana/grafana/changelogs/config.yaml ansible_collections/grafana/grafana/examples/agent-basic-no-options.yaml ansible_collections/grafana/grafana/examples/agent-send-to-grafana-cloud.yaml +ansible_collections/grafana/grafana/examples/alloy.yaml ansible_collections/grafana/grafana/examples/ansible.cfg -ansible_collections/grafana/grafana/examples/monitor-multiple-instances.md +ansible_collections/grafana/grafana/examples/loki-basic-no-options.yml +ansible_collections/grafana/grafana/examples/loki-local-filesystem-with-retention-and-alert.yml +ansible_collections/grafana/grafana/examples/mimir-3-hosts.yaml +ansible_collections/grafana/grafana/examples/monitor-multiple-instance-otel.md +ansible_collections/grafana/grafana/examples/monitor-multiple-instances-agent.md +ansible_collections/grafana/grafana/examples/opentelemetry-collector.yml +ansible_collections/grafana/grafana/examples/promtail-multiple-logs.yml ansible_collections/grafana/grafana/meta/runtime.yml ansible_collections/grafana/grafana/plugins/modules/alert_contact_point.py ansible_collections/grafana/grafana/plugins/modules/alert_notification_policy.py @@ -49149,6 +50590,17 @@ ansible_collections/grafana/grafana/plugins/modules/cloud_stack.py ansible_collections/grafana/grafana/plugins/modules/dashboard.py ansible_collections/grafana/grafana/plugins/modules/datasource.py ansible_collections/grafana/grafana/plugins/modules/folder.py +ansible_collections/grafana/grafana/roles/alloy/README.md +ansible_collections/grafana/grafana/roles/alloy/defaults/main.yml +ansible_collections/grafana/grafana/roles/alloy/handlers/main.yml +ansible_collections/grafana/grafana/roles/alloy/meta/main.yml +ansible_collections/grafana/grafana/roles/alloy/tasks/configure.yml +ansible_collections/grafana/grafana/roles/alloy/tasks/install.yml +ansible_collections/grafana/grafana/roles/alloy/tasks/main.yml +ansible_collections/grafana/grafana/roles/alloy/tasks/service.yml +ansible_collections/grafana/grafana/roles/alloy/templates/alloy.service.j2 +ansible_collections/grafana/grafana/roles/alloy/templates/config.alloy.j2 +ansible_collections/grafana/grafana/roles/alloy/templates/environment.j2 ansible_collections/grafana/grafana/roles/grafana/README.md ansible_collections/grafana/grafana/roles/grafana/test-requirements.txt ansible_collections/grafana/grafana/roles/grafana/defaults/main.yml @@ -49196,6 +50648,65 @@ ansible_collections/grafana/grafana/roles/grafana_agent/templates/EnvironmentFil ansible_collections/grafana/grafana/roles/grafana_agent/templates/config.yaml.j2 ansible_collections/grafana/grafana/roles/grafana_agent/templates/grafana-agent.service.j2 ansible_collections/grafana/grafana/roles/grafana_agent/vars/main.yaml +ansible_collections/grafana/grafana/roles/loki/README.md +ansible_collections/grafana/grafana/roles/loki/defaults/main.yml +ansible_collections/grafana/grafana/roles/loki/handlers/main.yml +ansible_collections/grafana/grafana/roles/loki/meta/main.yml +ansible_collections/grafana/grafana/roles/loki/molecule/default/converge.yml +ansible_collections/grafana/grafana/roles/loki/molecule/default/molecule.yml +ansible_collections/grafana/grafana/roles/loki/tasks/deploy.yml +ansible_collections/grafana/grafana/roles/loki/tasks/main.yml +ansible_collections/grafana/grafana/roles/loki/tasks/setup-Debian.yml +ansible_collections/grafana/grafana/roles/loki/tasks/setup-RedHat.yml +ansible_collections/grafana/grafana/roles/loki/tasks/uninstall.yml +ansible_collections/grafana/grafana/roles/loki/templates/config.yml.j2 +ansible_collections/grafana/grafana/roles/loki/templates/rules.yml.j2 +ansible_collections/grafana/grafana/roles/loki/vars/Debian.yml +ansible_collections/grafana/grafana/roles/loki/vars/RedHat.yml +ansible_collections/grafana/grafana/roles/mimir/README.md +ansible_collections/grafana/grafana/roles/mimir/defaults/main.yml +ansible_collections/grafana/grafana/roles/mimir/files/.gitkeep +ansible_collections/grafana/grafana/roles/mimir/handlers/main.yml +ansible_collections/grafana/grafana/roles/mimir/meta/main.yml +ansible_collections/grafana/grafana/roles/mimir/molecule/test-requirements.txt +ansible_collections/grafana/grafana/roles/mimir/molecule/default/converge.yml +ansible_collections/grafana/grafana/roles/mimir/molecule/default/molecule.yml +ansible_collections/grafana/grafana/roles/mimir/molecule/default/tests/test_default.py +ansible_collections/grafana/grafana/roles/mimir/tasks/deploy.yml +ansible_collections/grafana/grafana/roles/mimir/tasks/main.yml +ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Debian.yml +ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Redhat.yml +ansible_collections/grafana/grafana/roles/mimir/tasks/uninstall.yml +ansible_collections/grafana/grafana/roles/mimir/templates/.gitkeep +ansible_collections/grafana/grafana/roles/mimir/templates/config.yml.j2 +ansible_collections/grafana/grafana/roles/mimir/vars/.gitkeep +ansible_collections/grafana/grafana/roles/opentelemetry_collector/README.md +ansible_collections/grafana/grafana/roles/opentelemetry_collector/defaults/main.yml +ansible_collections/grafana/grafana/roles/opentelemetry_collector/handlers/main.yml +ansible_collections/grafana/grafana/roles/opentelemetry_collector/meta/main.yml +ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/configure.yml +ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/install.yml +ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/main.yml +ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/service.yml +ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector.service.j2 +ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector_config.yml.j2 +ansible_collections/grafana/grafana/roles/promtail/README.md +ansible_collections/grafana/grafana/roles/promtail/defaults/main.yml +ansible_collections/grafana/grafana/roles/promtail/handlers/main.yml +ansible_collections/grafana/grafana/roles/promtail/meta/main.yml +ansible_collections/grafana/grafana/roles/promtail/molecule/default/converge.yml +ansible_collections/grafana/grafana/roles/promtail/molecule/default/molecule.yml +ansible_collections/grafana/grafana/roles/promtail/tasks/acl_configuration.yml +ansible_collections/grafana/grafana/roles/promtail/tasks/deploy.yml +ansible_collections/grafana/grafana/roles/promtail/tasks/main.yml +ansible_collections/grafana/grafana/roles/promtail/tasks/setup-Debian.yml +ansible_collections/grafana/grafana/roles/promtail/tasks/setup-RedHat.yml +ansible_collections/grafana/grafana/roles/promtail/tasks/uninstall.yml +ansible_collections/grafana/grafana/roles/promtail/templates/config.yml.j2 +ansible_collections/grafana/grafana/roles/promtail/templates/promtail.service.j2 +ansible_collections/grafana/grafana/roles/promtail/templates/promtail_acl.j2 +ansible_collections/grafana/grafana/roles/promtail/vars/Debian.yml +ansible_collections/grafana/grafana/roles/promtail/vars/RedHat.yml ansible_collections/grafana/grafana/tests/integration/requirements.txt ansible_collections/grafana/grafana/tests/integration/targets/alert_contact_point/tasks/main.yml ansible_collections/grafana/grafana/tests/integration/targets/alert_notification_policy/tasks/main.yml @@ -49380,6 +50891,7 @@ ansible_collections/hetzner/hcloud/tests/config.yml ansible_collections/hetzner/hcloud/tests/constraints.txt ansible_collections/hetzner/hcloud/tests/requirements.yml ansible_collections/hetzner/hcloud/tests/integration/README.md +ansible_collections/hetzner/hcloud/tests/integration/cloud-config-hcloud.ini.in ansible_collections/hetzner/hcloud/tests/integration/requirements.txt ansible_collections/hetzner/hcloud/tests/integration/common/defaults/main/common.yml ansible_collections/hetzner/hcloud/tests/integration/common/tasks/main.yml @@ -49491,6 +51003,7 @@ ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/tasks ansible_collections/hetzner/hcloud/tests/integration/targets/network/aliases ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/common.yml ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/main.yml +ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/cleanup.yml ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/main.yml ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/test.yml ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/aliases @@ -49511,7 +51024,9 @@ ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/tas ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/aliases ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/defaults/main/common.yml ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/defaults/main/main.yml +ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/cleanup.yml ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/main.yml +ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/prepare.yml ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/test.yml ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/aliases ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/defaults/main/common.yml @@ -49555,7 +51070,9 @@ ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/tasks/t ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/aliases ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/defaults/main/common.yml ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/defaults/main/main.yml +ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/cleanup.yml ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/main.yml +ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/prepare.yml ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/test.yml ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/aliases ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/defaults/main/common.yml @@ -49599,56 +51116,22 @@ ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/tasks/c ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/tasks/main.yml ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/tasks/prepare.yml ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/tasks/test.yml -ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.13.txt ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.14.txt ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.15.txt ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.16.txt +ansible_collections/hetzner/hcloud/tests/unit/conftest.py ansible_collections/hetzner/hcloud/tests/unit/requirements.txt +ansible_collections/hetzner/hcloud/tests/unit/inventory/test_hcloud.py ansible_collections/hetzner/hcloud/tests/unit/module_utils/test_hcloud.py ansible_collections/hetzner/hcloud/tests/utils/ci.sh ansible_collections/hetzner/hcloud/tests/utils/gitlab/gitlab.sh ansible_collections/hetzner/hcloud/tests/utils/gitlab/integration.sh ansible_collections/hetzner/hcloud/tests/utils/gitlab/sanity.sh -ansible_collections/hpe/nimble/.gitignore -ansible_collections/hpe/nimble/CHANGELOG.rst -ansible_collections/hpe/nimble/FILES.json -ansible_collections/hpe/nimble/MANIFEST.json -ansible_collections/hpe/nimble/README.md -ansible_collections/hpe/nimble/bindep.txt -ansible_collections/hpe/nimble/requirements.txt -ansible_collections/hpe/nimble/changelogs/changelog.yaml -ansible_collections/hpe/nimble/changelogs/config.yaml -ansible_collections/hpe/nimble/meta/runtime.yml -ansible_collections/hpe/nimble/plugins/doc_fragments/hpe_nimble.py -ansible_collections/hpe/nimble/plugins/module_utils/hpe_nimble.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_access_control_record.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_array.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_chap_user.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_disk.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_encryption.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_fc.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_group.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_info.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_initiator_group.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_network.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_partner.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_performance_policy.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_pool.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_schedule.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_template.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_shelf.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot_collection.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user_policy.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume.py -ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume_collection.py -ansible_collections/hpe/nimble/tests/sanity/ignore-2.10.txt -ansible_collections/hpe/nimble/tests/sanity/ignore-2.11.txt -ansible_collections/hpe/nimble/tests/sanity/ignore-2.12.txt -ansible_collections/hpe/nimble/tests/sanity/ignore-2.9.txt +ansible_collections/ibm/qradar/.ansible-lint ansible_collections/ibm/qradar/.gitignore +ansible_collections/ibm/qradar/.isort.cfg ansible_collections/ibm/qradar/.pre-commit-config.yaml +ansible_collections/ibm/qradar/.prettierignore ansible_collections/ibm/qradar/.yamllint ansible_collections/ibm/qradar/CHANGELOG.rst ansible_collections/ibm/qradar/FILES.json @@ -49656,11 +51139,19 @@ ansible_collections/ibm/qradar/LICENSE ansible_collections/ibm/qradar/MANIFEST.json ansible_collections/ibm/qradar/README.md ansible_collections/ibm/qradar/bindep.txt +ansible_collections/ibm/qradar/codecov.yml ansible_collections/ibm/qradar/pyproject.toml ansible_collections/ibm/qradar/requirements.txt ansible_collections/ibm/qradar/test-requirements.txt ansible_collections/ibm/qradar/tox.ini -ansible_collections/ibm/qradar/.github/workflows/test.yml +ansible_collections/ibm/qradar/.github/dependabot.yml +ansible_collections/ibm/qradar/.github/release-drafter.yml +ansible_collections/ibm/qradar/.github/workflows/ack.yml +ansible_collections/ibm/qradar/.github/workflows/codecoverage.yml +ansible_collections/ibm/qradar/.github/workflows/lint.yml +ansible_collections/ibm/qradar/.github/workflows/push.yml +ansible_collections/ibm/qradar/.github/workflows/release.yml +ansible_collections/ibm/qradar/.github/workflows/tests.yml ansible_collections/ibm/qradar/changelogs/changelog.yaml ansible_collections/ibm/qradar/changelogs/config.yaml ansible_collections/ibm/qradar/docs/ibm.qradar.deploy_module.rst @@ -49726,7 +51217,6 @@ ansible_collections/ibm/qradar/tests/sanity/ignore-2.9.txt ansible_collections/ibm/qradar/tests/unit/__init__.py ansible_collections/ibm/qradar/tests/unit/requirements.txt ansible_collections/ibm/qradar/tests/unit/compat/__init__.py -ansible_collections/ibm/qradar/tests/unit/compat/builtins.py ansible_collections/ibm/qradar/tests/unit/compat/mock.py ansible_collections/ibm/qradar/tests/unit/compat/unittest.py ansible_collections/ibm/qradar/tests/unit/mock/__init__.py @@ -50380,6 +51870,13 @@ ansible_collections/inspur/ispim/__init__.py ansible_collections/inspur/ispim/requirements.txt ansible_collections/inspur/ispim/.github/settings.yml ansible_collections/inspur/ispim/.github/workflows/ansible-test.yml +ansible_collections/inspur/ispim/.idea/.gitignore +ansible_collections/inspur/ispim/.idea/inspur.ispim.iml +ansible_collections/inspur/ispim/.idea/misc.xml +ansible_collections/inspur/ispim/.idea/modules.xml +ansible_collections/inspur/ispim/.idea/vcs.xml +ansible_collections/inspur/ispim/.idea/workspace.xml +ansible_collections/inspur/ispim/.idea/inspectionProfiles/profiles_settings.xml ansible_collections/inspur/ispim/changelogs/.plugin-cache.yaml ansible_collections/inspur/ispim/changelogs/changelog.yaml ansible_collections/inspur/ispim/changelogs/config.yaml @@ -50646,6 +52143,617 @@ ansible_collections/inspur/ispim/plugins/modules/user_group_info.py ansible_collections/inspur/ispim/plugins/modules/user_info.py ansible_collections/inspur/ispim/plugins/modules/virtual_media_info.py ansible_collections/inspur/ispim/plugins/modules/volt_info.py +ansible_collections/inspur/ispim/venv/.gitignore +ansible_collections/inspur/ispim/venv/pyvenv.cfg +ansible_collections/inspur/ispim/venv/Lib/site-packages/_virtualenv.pth +ansible_collections/inspur/ispim/venv/Lib/site-packages/_virtualenv.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/distutils-precedence.pth +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.virtualenv +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.virtualenv +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.virtualenv +ansible_collections/inspur/ispim/venv/Lib/site-packages/_distutils_hack/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/_distutils_hack/override.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/__main__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/py.typed +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/INSTALLER +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/LICENSE.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/METADATA +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/RECORD +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/WHEEL +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/entry_points.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip-21.1.2.dist-info/top_level.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/build_env.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cache.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/configuration.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/exceptions.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/main.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/pyproject.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/wheel_builder.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/base_command.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/command_context.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/main.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/parser.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/req_command.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/spinners.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/cache.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/check.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/completion.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/configuration.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/debug.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/download.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/freeze.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/hash.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/help.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/install.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/list.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/search.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/show.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/commands/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/installed.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/collector.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/package_finder.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/index/sources.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/_distutils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/locations/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/metadata/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/metadata/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/candidate.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/direct_url.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/format_control.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/index.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/link.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/scheme.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/search_scope.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/target_python.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/models/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/auth.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/cache.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/download.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/session.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/check.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/freeze.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/prepare.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/constructors.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_file.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_install.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_set.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_tracker.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/datetime.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/encoding.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/glibc.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/hashes.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/logging.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/misc.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/models.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/packaging.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/parallel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/urls.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/utils/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/git.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/appdirs.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distro.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pyparsing.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/six.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/vendor.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/certifi/core.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/enums.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/win32.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/database.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/index.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/locators.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/markers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/codec.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/core.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/packaging/version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/build.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/check.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/meta.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/bar.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/counter.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/progress/spinner.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/api.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/auth.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/certs.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/help.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/models.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/packages.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/structures.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/requests/utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/after.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/before.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/nap.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/retry.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/stop.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/tenacity/wait.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/decoder.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/encoder.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/ordered.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/toml/tz.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/extern/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_deprecation_warning.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_imp.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/archive_util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/build_meta.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/cli-32.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/cli-64.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/cli.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/config.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/dep_util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/depends.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/dist.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/errors.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/extension.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/glob.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/gui-32.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/gui-64.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/gui.exe +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/installer.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/launch.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/lib2to3_ex.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/monkey.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/msvc.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/namespaces.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/package_index.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/py34compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/sandbox.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/script (dev).tmpl +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/script.tmpl +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/ssl_support.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/unicode_utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/windows_support.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/INSTALLER +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/LICENSE +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/METADATA +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/RECORD +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/WHEEL +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/dependency_links.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/entry_points.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools-57.0.0.dist-info/top_level.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/archive_util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/cmd.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/config.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/core.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/debug.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/dep_util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/dir_util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/dist.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/errors.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/extension.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/file_util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/filelist.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/log.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/py35compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/py38compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/spawn.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/text_file.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/check.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/clean.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/config.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/register.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_distutils/command/upload.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/alias.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/bdist_egg.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/bdist_rpm.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/build_clib.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/build_ext.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/build_py.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/develop.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/dist_info.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/easy_install.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/egg_info.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install_egg_info.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install_lib.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/install_scripts.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/launcher manifest.xml +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/py36compat.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/register.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/rotate.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/saveopts.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/sdist.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/setopt.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/test.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/upload.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/command/upload_docs.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/setuptools/extern/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/__main__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/bdist_wheel.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/macosx_libfile.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/metadata.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/pkginfo.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/util.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/wheelfile.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/INSTALLER +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/LICENSE.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/METADATA +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/RECORD +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/WHEEL +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/entry_points.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel-0.36.2.dist-info/top_level.txt +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/convert.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/pack.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/cli/unpack.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/packaging/__init__.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/packaging/_typing.py +ansible_collections/inspur/ispim/venv/Lib/site-packages/wheel/vendored/packaging/tags.py +ansible_collections/inspur/ispim/venv/Scripts/activate +ansible_collections/inspur/ispim/venv/Scripts/activate.bat +ansible_collections/inspur/ispim/venv/Scripts/activate.fish +ansible_collections/inspur/ispim/venv/Scripts/activate.ps1 +ansible_collections/inspur/ispim/venv/Scripts/activate.xsh +ansible_collections/inspur/ispim/venv/Scripts/activate_this.py +ansible_collections/inspur/ispim/venv/Scripts/deactivate.bat +ansible_collections/inspur/ispim/venv/Scripts/pip-3.7.exe +ansible_collections/inspur/ispim/venv/Scripts/pip.exe +ansible_collections/inspur/ispim/venv/Scripts/pip3.7.exe +ansible_collections/inspur/ispim/venv/Scripts/pip3.exe +ansible_collections/inspur/ispim/venv/Scripts/pydoc.bat +ansible_collections/inspur/ispim/venv/Scripts/python.exe +ansible_collections/inspur/ispim/venv/Scripts/pythonw.exe +ansible_collections/inspur/ispim/venv/Scripts/wheel-3.7.exe +ansible_collections/inspur/ispim/venv/Scripts/wheel.exe +ansible_collections/inspur/ispim/venv/Scripts/wheel3.7.exe +ansible_collections/inspur/ispim/venv/Scripts/wheel3.exe ansible_collections/inspur/sm/CHANGELOG.rst ansible_collections/inspur/sm/CODE_OF_CONDUCT.md ansible_collections/inspur/sm/FILES.json @@ -51081,6 +53189,8 @@ ansible_collections/inspur/sm/plugins/modules/user_group_info.py ansible_collections/inspur/sm/plugins/modules/user_info.py ansible_collections/inspur/sm/plugins/modules/virtual_media_info.py ansible_collections/inspur/sm/plugins/modules/volt_info.py +ansible_collections/junipernetworks/junos/.ansible-lint +ansible_collections/junipernetworks/junos/.flake8 ansible_collections/junipernetworks/junos/.gitignore ansible_collections/junipernetworks/junos/.isort.cfg ansible_collections/junipernetworks/junos/.pre-commit-config.yaml @@ -51096,12 +53206,12 @@ ansible_collections/junipernetworks/junos/codecov.yml ansible_collections/junipernetworks/junos/pyproject.toml ansible_collections/junipernetworks/junos/requirements.txt ansible_collections/junipernetworks/junos/test-requirements.txt -ansible_collections/junipernetworks/junos/tox.ini +ansible_collections/junipernetworks/junos/tox-ansible.ini ansible_collections/junipernetworks/junos/.github/dependabot.yml ansible_collections/junipernetworks/junos/.github/release-drafter.yml -ansible_collections/junipernetworks/junos/.github/workflows/ack.yml +ansible_collections/junipernetworks/junos/.github/workflows/check_label.yml ansible_collections/junipernetworks/junos/.github/workflows/codecoverage.yml -ansible_collections/junipernetworks/junos/.github/workflows/push.yml +ansible_collections/junipernetworks/junos/.github/workflows/draft_release.yml ansible_collections/junipernetworks/junos/.github/workflows/release.yml ansible_collections/junipernetworks/junos/.github/workflows/tests.yml ansible_collections/junipernetworks/junos/changelogs/changelog.yaml @@ -51126,7 +53236,6 @@ ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_lag_i ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_lldp_global_module.rst ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_lldp_interfaces_module.rst ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_logging_global_module.rst -ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_logging_module.rst ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_netconf.rst ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_netconf_module.rst ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_ntp_global_module.rst @@ -51151,7 +53260,47 @@ ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_vlans ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_vrf_module.rst ansible_collections/junipernetworks/junos/meta/runtime.yml ansible_collections/junipernetworks/junos/plugins/action/__init__.py +ansible_collections/junipernetworks/junos/plugins/action/acl_interfaces.py +ansible_collections/junipernetworks/junos/plugins/action/acls.py +ansible_collections/junipernetworks/junos/plugins/action/banner.py +ansible_collections/junipernetworks/junos/plugins/action/bgp_address_family.py +ansible_collections/junipernetworks/junos/plugins/action/bgp_global.py +ansible_collections/junipernetworks/junos/plugins/action/command.py +ansible_collections/junipernetworks/junos/plugins/action/config.py +ansible_collections/junipernetworks/junos/plugins/action/facts.py +ansible_collections/junipernetworks/junos/plugins/action/hostname.py +ansible_collections/junipernetworks/junos/plugins/action/interfaces.py ansible_collections/junipernetworks/junos/plugins/action/junos.py +ansible_collections/junipernetworks/junos/plugins/action/l2_interfaces.py +ansible_collections/junipernetworks/junos/plugins/action/l3_intefaces.py +ansible_collections/junipernetworks/junos/plugins/action/lacp.py +ansible_collections/junipernetworks/junos/plugins/action/lacp_intefaces.py +ansible_collections/junipernetworks/junos/plugins/action/lag_interfaces.py +ansible_collections/junipernetworks/junos/plugins/action/lldp_global.py +ansible_collections/junipernetworks/junos/plugins/action/lldp_interfaces.py +ansible_collections/junipernetworks/junos/plugins/action/logging.py +ansible_collections/junipernetworks/junos/plugins/action/logging_global.py +ansible_collections/junipernetworks/junos/plugins/action/netconf.py +ansible_collections/junipernetworks/junos/plugins/action/ntp_global.py +ansible_collections/junipernetworks/junos/plugins/action/ospf_interfaces.py +ansible_collections/junipernetworks/junos/plugins/action/ospfv2.py +ansible_collections/junipernetworks/junos/plugins/action/ospfv3.py +ansible_collections/junipernetworks/junos/plugins/action/package.py +ansible_collections/junipernetworks/junos/plugins/action/ping.py +ansible_collections/junipernetworks/junos/plugins/action/prefix_lists.py +ansible_collections/junipernetworks/junos/plugins/action/routing_instances.py +ansible_collections/junipernetworks/junos/plugins/action/routing_options.py +ansible_collections/junipernetworks/junos/plugins/action/rpc.py +ansible_collections/junipernetworks/junos/plugins/action/scp.py +ansible_collections/junipernetworks/junos/plugins/action/security_policies.py +ansible_collections/junipernetworks/junos/plugins/action/security_policies_global.py +ansible_collections/junipernetworks/junos/plugins/action/security_zones.py +ansible_collections/junipernetworks/junos/plugins/action/snmp_server.py +ansible_collections/junipernetworks/junos/plugins/action/static_routes.py +ansible_collections/junipernetworks/junos/plugins/action/system.py +ansible_collections/junipernetworks/junos/plugins/action/user.py +ansible_collections/junipernetworks/junos/plugins/action/vlans.py +ansible_collections/junipernetworks/junos/plugins/action/vrf.py ansible_collections/junipernetworks/junos/plugins/cliconf/__init__.py ansible_collections/junipernetworks/junos/plugins/cliconf/junos.py ansible_collections/junipernetworks/junos/plugins/doc_fragments/__init__.py @@ -51350,7 +53499,6 @@ ansible_collections/junipernetworks/junos/plugins/modules/junos_lacp_interfaces. ansible_collections/junipernetworks/junos/plugins/modules/junos_lag_interfaces.py ansible_collections/junipernetworks/junos/plugins/modules/junos_lldp_global.py ansible_collections/junipernetworks/junos/plugins/modules/junos_lldp_interfaces.py -ansible_collections/junipernetworks/junos/plugins/modules/junos_logging.py ansible_collections/junipernetworks/junos/plugins/modules/junos_logging_global.py ansible_collections/junipernetworks/junos/plugins/modules/junos_netconf.py ansible_collections/junipernetworks/junos/plugins/modules/junos_ntp_global.py @@ -51378,6 +53526,7 @@ ansible_collections/junipernetworks/junos/plugins/netconf/junos.py ansible_collections/junipernetworks/junos/plugins/terminal/__init__.py ansible_collections/junipernetworks/junos/plugins/terminal/junos.py ansible_collections/junipernetworks/junos/tests/.gitignore +ansible_collections/junipernetworks/junos/tests/config.yml ansible_collections/junipernetworks/junos/tests/integration/target-prefixes.network ansible_collections/junipernetworks/junos/tests/integration/targets/junos_acl_interfaces/defaults/main.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_acl_interfaces/meta/main.yaml @@ -51504,6 +53653,7 @@ ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/ ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tasks/main.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tasks/netconf.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tests/netconf/facts.yaml +ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tests/netconf/network_facts.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_hostname/defaults/main.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_hostname/meta/main.yml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_hostname/tasks/main.yaml @@ -51629,12 +53779,6 @@ ansible_collections/junipernetworks/junos/tests/integration/targets/junos_lldp_i ansible_collections/junipernetworks/junos/tests/integration/targets/junos_lldp_interfaces/tests/netconf/replaced.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_lldp_interfaces/tests/netconf/rtt.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_lldp_interfaces/tests/netconf/fixtures/parsed.cfg -ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/aliases -ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/defaults/main.yaml -ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/meta/main.yml -ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/main.yaml -ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/netconf.yaml -ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tests/netconf/basic.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging_global/defaults/main.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging_global/meta/main.yml ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging_global/tasks/main.yaml @@ -51904,20 +54048,14 @@ ansible_collections/junipernetworks/junos/tests/integration/targets/junos_vrf/ta ansible_collections/junipernetworks/junos/tests/integration/targets/junos_vrf/tests/netconf/basic.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/meta/main.yaml ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/main.yml -ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.10.txt -ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.11.txt -ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.12.txt -ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.13.txt +ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/prepare.yml ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.14.txt ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.15.txt ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.16.txt ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.17.txt -ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.9.txt +ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.18.txt ansible_collections/junipernetworks/junos/tests/unit/__init__.py ansible_collections/junipernetworks/junos/tests/unit/requirements.txt -ansible_collections/junipernetworks/junos/tests/unit/compat/__init__.py -ansible_collections/junipernetworks/junos/tests/unit/compat/mock.py -ansible_collections/junipernetworks/junos/tests/unit/compat/unittest.py ansible_collections/junipernetworks/junos/tests/unit/mock/__init__.py ansible_collections/junipernetworks/junos/tests/unit/mock/loader.py ansible_collections/junipernetworks/junos/tests/unit/mock/path.py @@ -52010,6 +54148,895 @@ ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/fixtu ansible_collections/junipernetworks/junos/tests/unit/plugins/__init__.py ansible_collections/junipernetworks/junos/tests/unit/plugins/terminal/__init__.py ansible_collections/junipernetworks/junos/tests/unit/plugins/terminal/test_junos.py +ansible_collections/kaytus/ksmanage/CHANGELOG.rst +ansible_collections/kaytus/ksmanage/CODE_OF_CONDUCT.md +ansible_collections/kaytus/ksmanage/FILES.json +ansible_collections/kaytus/ksmanage/LICENSE +ansible_collections/kaytus/ksmanage/MANIFEST.json +ansible_collections/kaytus/ksmanage/README.md +ansible_collections/kaytus/ksmanage/requirements.txt +ansible_collections/kaytus/ksmanage/.github/workflows/ansible-test.yml +ansible_collections/kaytus/ksmanage/.idea/.gitignore +ansible_collections/kaytus/ksmanage/.idea/kaytus.ksmanage.iml +ansible_collections/kaytus/ksmanage/.idea/modules.xml +ansible_collections/kaytus/ksmanage/.idea/vcs.xml +ansible_collections/kaytus/ksmanage/.idea/workspace.xml +ansible_collections/kaytus/ksmanage/.idea/inspectionProfiles/profiles_settings.xml +ansible_collections/kaytus/ksmanage/changelogs/.plugin-cache.yaml +ansible_collections/kaytus/ksmanage/changelogs/changelog.yaml +ansible_collections/kaytus/ksmanage/changelogs/config.yaml +ansible_collections/kaytus/ksmanage/changelogs/fragments/.keep +ansible_collections/kaytus/ksmanage/docs/ad_group_info_module.rst +ansible_collections/kaytus/ksmanage/docs/ad_group_module.rst +ansible_collections/kaytus/ksmanage/docs/ad_info_module.rst +ansible_collections/kaytus/ksmanage/docs/adapter_info_module.rst +ansible_collections/kaytus/ksmanage/docs/add_ldisk_module.rst +ansible_collections/kaytus/ksmanage/docs/alert_policy_info_module.rst +ansible_collections/kaytus/ksmanage/docs/audit_log_info_module.rst +ansible_collections/kaytus/ksmanage/docs/auto_capture_info_module.rst +ansible_collections/kaytus/ksmanage/docs/backplane_info_module.rst +ansible_collections/kaytus/ksmanage/docs/backup_module.rst +ansible_collections/kaytus/ksmanage/docs/bios_export_module.rst +ansible_collections/kaytus/ksmanage/docs/bios_import_module.rst +ansible_collections/kaytus/ksmanage/docs/bios_info_module.rst +ansible_collections/kaytus/ksmanage/docs/bmc_info_module.rst +ansible_collections/kaytus/ksmanage/docs/boot_image_info_module.rst +ansible_collections/kaytus/ksmanage/docs/boot_option_info_module.rst +ansible_collections/kaytus/ksmanage/docs/clear_audit_log_module.rst +ansible_collections/kaytus/ksmanage/docs/clear_event_log_module.rst +ansible_collections/kaytus/ksmanage/docs/clear_system_log_module.rst +ansible_collections/kaytus/ksmanage/docs/collect_blackbox_module.rst +ansible_collections/kaytus/ksmanage/docs/collect_log_module.rst +ansible_collections/kaytus/ksmanage/docs/connect_media_info_module.rst +ansible_collections/kaytus/ksmanage/docs/cpu_info_module.rst +ansible_collections/kaytus/ksmanage/docs/del_session_module.rst +ansible_collections/kaytus/ksmanage/docs/dns_info_module.rst +ansible_collections/kaytus/ksmanage/docs/download_auto_screenshot_module.rst +ansible_collections/kaytus/ksmanage/docs/download_manual_screenshot_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_ad_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_alert_policy_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_auto_capture_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_bios_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_boot_image_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_boot_option_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_connect_media_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_dns_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_event_log_policy_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_fan_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_fru_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_ipv4_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_ipv6_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_kvm_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_ldap_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_ldisk_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_log_setting_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_m6_log_setting_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_manual_capture_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_media_instance_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_ncsi_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_network_bond_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_network_link_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_network_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_ntp_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_pdisk_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_power_budget_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_power_restore_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_power_status_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_preserve_config_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_psu_config_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_psu_peak_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_restore_factory_default_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_service_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_smtp_com_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_smtp_dest_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_smtp_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_snmp_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_snmp_trap_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_threshold_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_uid_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_virtual_media_module.rst +ansible_collections/kaytus/ksmanage/docs/edit_vlan_module.rst +ansible_collections/kaytus/ksmanage/docs/event_log_info_module.rst +ansible_collections/kaytus/ksmanage/docs/event_log_policy_info_module.rst +ansible_collections/kaytus/ksmanage/docs/fan_info_module.rst +ansible_collections/kaytus/ksmanage/docs/fru_info_module.rst +ansible_collections/kaytus/ksmanage/docs/fw_version_info_module.rst +ansible_collections/kaytus/ksmanage/docs/gpu_info_module.rst +ansible_collections/kaytus/ksmanage/docs/hard_disk_info_module.rst +ansible_collections/kaytus/ksmanage/docs/hba_info_module.rst +ansible_collections/kaytus/ksmanage/docs/index.rst +ansible_collections/kaytus/ksmanage/docs/kvm_info_module.rst +ansible_collections/kaytus/ksmanage/docs/ldap_group_info_module.rst +ansible_collections/kaytus/ksmanage/docs/ldap_group_module.rst +ansible_collections/kaytus/ksmanage/docs/ldap_info_module.rst +ansible_collections/kaytus/ksmanage/docs/ldisk_info_module.rst +ansible_collections/kaytus/ksmanage/docs/log_setting_info_module.rst +ansible_collections/kaytus/ksmanage/docs/media_instance_info_module.rst +ansible_collections/kaytus/ksmanage/docs/mem_info_module.rst +ansible_collections/kaytus/ksmanage/docs/ncsi_info_module.rst +ansible_collections/kaytus/ksmanage/docs/network_bond_info_module.rst +ansible_collections/kaytus/ksmanage/docs/network_info_module.rst +ansible_collections/kaytus/ksmanage/docs/network_link_info_module.rst +ansible_collections/kaytus/ksmanage/docs/ntp_info_module.rst +ansible_collections/kaytus/ksmanage/docs/onboard_disk_info_module.rst +ansible_collections/kaytus/ksmanage/docs/pcie_info_module.rst +ansible_collections/kaytus/ksmanage/docs/pdisk_info_module.rst +ansible_collections/kaytus/ksmanage/docs/power_budget_info_module.rst +ansible_collections/kaytus/ksmanage/docs/power_consumption_info_module.rst +ansible_collections/kaytus/ksmanage/docs/power_restore_info_module.rst +ansible_collections/kaytus/ksmanage/docs/power_status_info_module.rst +ansible_collections/kaytus/ksmanage/docs/preserve_config_info_module.rst +ansible_collections/kaytus/ksmanage/docs/psu_config_info_module.rst +ansible_collections/kaytus/ksmanage/docs/psu_info_module.rst +ansible_collections/kaytus/ksmanage/docs/psu_peak_info_module.rst +ansible_collections/kaytus/ksmanage/docs/raid_info_module.rst +ansible_collections/kaytus/ksmanage/docs/reset_bmc_module.rst +ansible_collections/kaytus/ksmanage/docs/reset_kvm_module.rst +ansible_collections/kaytus/ksmanage/docs/restore_module.rst +ansible_collections/kaytus/ksmanage/docs/self_test_info_module.rst +ansible_collections/kaytus/ksmanage/docs/sensor_info_module.rst +ansible_collections/kaytus/ksmanage/docs/server_info_module.rst +ansible_collections/kaytus/ksmanage/docs/service_info_module.rst +ansible_collections/kaytus/ksmanage/docs/session_info_module.rst +ansible_collections/kaytus/ksmanage/docs/smtp_info_module.rst +ansible_collections/kaytus/ksmanage/docs/snmp_info_module.rst +ansible_collections/kaytus/ksmanage/docs/snmp_trap_info_module.rst +ansible_collections/kaytus/ksmanage/docs/support_info_module.rst +ansible_collections/kaytus/ksmanage/docs/system_log_info_module.rst +ansible_collections/kaytus/ksmanage/docs/temp_info_module.rst +ansible_collections/kaytus/ksmanage/docs/threshold_info_module.rst +ansible_collections/kaytus/ksmanage/docs/uid_info_module.rst +ansible_collections/kaytus/ksmanage/docs/update_cpld_module.rst +ansible_collections/kaytus/ksmanage/docs/update_fw_module.rst +ansible_collections/kaytus/ksmanage/docs/update_psu_module.rst +ansible_collections/kaytus/ksmanage/docs/user_group_info_module.rst +ansible_collections/kaytus/ksmanage/docs/user_group_module.rst +ansible_collections/kaytus/ksmanage/docs/user_info_module.rst +ansible_collections/kaytus/ksmanage/docs/user_module.rst +ansible_collections/kaytus/ksmanage/docs/virtual_media_info_module.rst +ansible_collections/kaytus/ksmanage/docs/volt_info_module.rst +ansible_collections/kaytus/ksmanage/meta/runtime.yml +ansible_collections/kaytus/ksmanage/plugins/doc_fragments/ksmanage.py +ansible_collections/kaytus/ksmanage/plugins/module_utils/ksmanage.py +ansible_collections/kaytus/ksmanage/plugins/modules/ad_group.py +ansible_collections/kaytus/ksmanage/plugins/modules/ad_group_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/ad_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/adapter_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/add_ldisk.py +ansible_collections/kaytus/ksmanage/plugins/modules/alert_policy_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/audit_log_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/auto_capture_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/backplane_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/backup.py +ansible_collections/kaytus/ksmanage/plugins/modules/bios_export.py +ansible_collections/kaytus/ksmanage/plugins/modules/bios_import.py +ansible_collections/kaytus/ksmanage/plugins/modules/bios_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/bmc_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/boot_image_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/boot_option_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/clear_audit_log.py +ansible_collections/kaytus/ksmanage/plugins/modules/clear_event_log.py +ansible_collections/kaytus/ksmanage/plugins/modules/clear_system_log.py +ansible_collections/kaytus/ksmanage/plugins/modules/collect_blackbox.py +ansible_collections/kaytus/ksmanage/plugins/modules/collect_log.py +ansible_collections/kaytus/ksmanage/plugins/modules/connect_media_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/cpu_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/del_session.py +ansible_collections/kaytus/ksmanage/plugins/modules/dns_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/download_auto_screenshot.py +ansible_collections/kaytus/ksmanage/plugins/modules/download_manual_screenshot.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_ad.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_alert_policy.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_auto_capture.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_bios.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_image.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_option.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_connect_media.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_dns.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_event_log_policy.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_fan.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_fru.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv4.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv6.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_kvm.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldap.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldisk.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_log_setting.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_m6_log_setting.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_manual_capture.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_media_instance.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_ncsi.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_network.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_bond.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_link.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_ntp.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_pdisk.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_budget.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_restore.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_status.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_preserve_config.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_config.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_peak.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_restore_factory_default.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_service.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_com.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_dest.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp_trap.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_threshold.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_uid.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_virtual_media.py +ansible_collections/kaytus/ksmanage/plugins/modules/edit_vlan.py +ansible_collections/kaytus/ksmanage/plugins/modules/event_log_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/event_log_policy_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/fan_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/fru_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/fw_version_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/gpu_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/hard_disk_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/hba_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/kvm_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group.py +ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/ldap_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/ldisk_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/log_setting_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/media_instance_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/mem_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/ncsi_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/network_bond_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/network_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/network_link_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/ntp_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/onboard_disk_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/pcie_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/pdisk_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/power_budget_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/power_consumption_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/power_restore_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/power_status_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/preserve_config_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/psu_config_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/psu_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/psu_peak_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/raid_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/reset_bmc.py +ansible_collections/kaytus/ksmanage/plugins/modules/reset_kvm.py +ansible_collections/kaytus/ksmanage/plugins/modules/restore.py +ansible_collections/kaytus/ksmanage/plugins/modules/self_test_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/sensor_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/server_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/service_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/session_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/smtp_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/snmp_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/snmp_trap_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/support_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/system_log_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/temp_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/threshold_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/uid_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/update_cpld.py +ansible_collections/kaytus/ksmanage/plugins/modules/update_fw.py +ansible_collections/kaytus/ksmanage/plugins/modules/update_psu.py +ansible_collections/kaytus/ksmanage/plugins/modules/user.py +ansible_collections/kaytus/ksmanage/plugins/modules/user_group.py +ansible_collections/kaytus/ksmanage/plugins/modules/user_group_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/user_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/virtual_media_info.py +ansible_collections/kaytus/ksmanage/plugins/modules/volt_info.py +ansible_collections/kaytus/ksmanage/venv/.gitignore +ansible_collections/kaytus/ksmanage/venv/pyvenv.cfg +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_virtualenv.pth +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_virtualenv.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/distutils-precedence.pth +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.virtualenv +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.virtualenv +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.virtualenv +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_distutils_hack/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/_distutils_hack/override.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/__main__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/py.typed +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/INSTALLER +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/LICENSE.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/METADATA +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/RECORD +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/WHEEL +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/entry_points.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip-21.1.2.dist-info/top_level.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/build_env.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cache.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/configuration.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/exceptions.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/main.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/pyproject.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/wheel_builder.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/base_command.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/command_context.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/main.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/parser.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/req_command.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/spinners.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/cache.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/check.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/completion.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/configuration.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/debug.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/download.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/freeze.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/hash.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/help.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/install.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/list.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/search.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/show.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/commands/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/installed.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/collector.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/package_finder.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/index/sources.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/_distutils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/locations/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/metadata/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/metadata/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/candidate.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/direct_url.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/format_control.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/index.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/link.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/scheme.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/search_scope.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/target_python.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/models/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/auth.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/cache.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/download.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/session.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/check.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/freeze.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/prepare.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/constructors.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_file.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_install.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_set.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_tracker.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/datetime.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/encoding.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/glibc.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/hashes.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/logging.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/misc.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/models.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/packaging.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/parallel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/urls.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/utils/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/git.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/appdirs.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distro.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pyparsing.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/six.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/vendor.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/certifi/core.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/enums.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/win32.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/database.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/index.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/locators.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/markers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/codec.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/core.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/packaging/version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/build.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/check.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/meta.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/bar.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/counter.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/progress/spinner.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/api.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/auth.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/certs.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/help.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/models.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/packages.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/structures.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/requests/utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/after.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/before.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/nap.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/retry.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/stop.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/tenacity/wait.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/decoder.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/encoder.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/ordered.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/toml/tz.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/extern/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_deprecation_warning.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_imp.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/archive_util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/build_meta.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/cli-32.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/cli-64.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/cli.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/config.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/dep_util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/depends.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/dist.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/errors.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/extension.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/glob.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/gui-32.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/gui-64.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/gui.exe +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/installer.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/launch.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/lib2to3_ex.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/monkey.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/msvc.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/namespaces.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/package_index.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/py34compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/sandbox.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/script (dev).tmpl +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/script.tmpl +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/ssl_support.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/unicode_utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/windows_support.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/INSTALLER +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/LICENSE +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/METADATA +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/RECORD +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/WHEEL +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/dependency_links.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/entry_points.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools-57.0.0.dist-info/top_level.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/archive_util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/cmd.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/config.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/core.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/debug.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/dep_util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/dir_util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/dist.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/errors.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/extension.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/file_util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/filelist.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/log.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/py35compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/py38compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/spawn.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/text_file.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/check.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/clean.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/config.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/register.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_distutils/command/upload.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/alias.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/bdist_egg.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/bdist_rpm.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/build_clib.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/build_ext.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/build_py.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/develop.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/dist_info.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/easy_install.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/egg_info.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install_egg_info.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install_lib.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/install_scripts.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/launcher manifest.xml +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/py36compat.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/register.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/rotate.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/saveopts.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/sdist.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/setopt.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/test.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/upload.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/command/upload_docs.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/setuptools/extern/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/__main__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/bdist_wheel.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/macosx_libfile.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/metadata.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/pkginfo.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/util.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/wheelfile.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/INSTALLER +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/LICENSE.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/METADATA +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/RECORD +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/WHEEL +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/entry_points.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel-0.36.2.dist-info/top_level.txt +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/convert.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/pack.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/cli/unpack.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/packaging/__init__.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/packaging/_typing.py +ansible_collections/kaytus/ksmanage/venv/Lib/site-packages/wheel/vendored/packaging/tags.py +ansible_collections/kaytus/ksmanage/venv/Scripts/activate +ansible_collections/kaytus/ksmanage/venv/Scripts/activate.bat +ansible_collections/kaytus/ksmanage/venv/Scripts/activate.fish +ansible_collections/kaytus/ksmanage/venv/Scripts/activate.ps1 +ansible_collections/kaytus/ksmanage/venv/Scripts/activate.xsh +ansible_collections/kaytus/ksmanage/venv/Scripts/activate_this.py +ansible_collections/kaytus/ksmanage/venv/Scripts/deactivate.bat +ansible_collections/kaytus/ksmanage/venv/Scripts/pip-3.7.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/pip.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/pip3.7.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/pip3.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/pydoc.bat +ansible_collections/kaytus/ksmanage/venv/Scripts/python.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/pythonw.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/wheel-3.7.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/wheel.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/wheel3.7.exe +ansible_collections/kaytus/ksmanage/venv/Scripts/wheel3.exe ansible_collections/kubernetes/core/.ansible-lint ansible_collections/kubernetes/core/.gitignore ansible_collections/kubernetes/core/.yamllint @@ -52079,11 +55106,11 @@ ansible_collections/kubernetes/core/plugins/action/k8s_cp.py ansible_collections/kubernetes/core/plugins/action/k8s_drain.py ansible_collections/kubernetes/core/plugins/action/k8s_exec.py ansible_collections/kubernetes/core/plugins/action/k8s_info.py +ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py ansible_collections/kubernetes/core/plugins/action/k8s_log.py ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py ansible_collections/kubernetes/core/plugins/action/k8s_scale.py ansible_collections/kubernetes/core/plugins/action/k8s_service.py -ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py ansible_collections/kubernetes/core/plugins/connection/kubectl.py ansible_collections/kubernetes/core/plugins/doc_fragments/__init__.py ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py @@ -52144,6 +55171,8 @@ ansible_collections/kubernetes/core/plugins/modules/k8s_service.py ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py ansible_collections/kubernetes/core/tests/config.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/aliases +ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/files/values.yaml ansible_collections/kubernetes/core/tests/integration/targets/helm/files/appversionless-chart/Chart.yaml @@ -52158,6 +55187,7 @@ ansible_collections/kubernetes/core/tests/integration/targets/helm/files/test-ch ansible_collections/kubernetes/core/tests/integration/targets/helm/files/test-chart/templates/configmap.yaml ansible_collections/kubernetes/core/tests/integration/targets/helm/files/test-crds/Chart.yaml ansible_collections/kubernetes/core/tests/integration/targets/helm/files/test-crds/crds/crd.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py ansible_collections/kubernetes/core/tests/integration/targets/helm/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/install.yml @@ -52165,7 +55195,9 @@ ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/main.ym ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_crds.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_not_installed.yml +ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml +ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_read_envvars.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_up_dep.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/tests_chart.yml @@ -52173,12 +55205,20 @@ ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/tests_c ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/tests_chart/from_repository.yml ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/tests_chart/from_url.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/aliases +ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart/Chart.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml +ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/aliases +ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/tasks/from_in_memory_kubeconfig.yml @@ -52187,17 +55227,25 @@ ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/ta ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/tasks/tests_helm_auth.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/aliases +ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/files/sample_plugin/plugin.yaml ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/aliases +ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/aliases +ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/aliases +ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/tasks/main.yml @@ -52212,24 +55260,36 @@ ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/play ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/playbooks/test.inventory_k8s.yml ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/playbooks/vars/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/tasks/server_side_apply.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/tasks/check_mode.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/files/archive.tar ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/files/simple_file.txt @@ -52238,7 +55298,6 @@ ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/files/dat ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/files/data/ansible/collection.txt ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/files/data/ansible/module.txt ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/files/data/teams/ansible.txt -ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/main.yml @@ -52251,39 +55310,64 @@ ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/tes ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_multi_container_pod.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/templates/pods_definition.j2 ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/files/crd-resource.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/files/setup-crd.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/defaults/main.yml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/templates/pod.j2 ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/tasks/main.yml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh +ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/api-server-caching.yml @@ -52291,47 +55375,69 @@ ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/dis ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/files/deployment.yaml ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/tasks/main.yml @@ -52341,22 +55447,32 @@ ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/templ ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/templates/pod_two.j2 ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/templates/pod_with_bad_namespace.j2 ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/aliases +ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/aliases +ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/tasks/main.yml ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/aliases +ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml +ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/meta/main.yml ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/tasks/main.yml @@ -52370,15 +55486,11 @@ ansible_collections/kubernetes/core/tests/integration/targets/setup_namespace/al ansible_collections/kubernetes/core/tests/integration/targets/setup_namespace/defaults/main.yml ansible_collections/kubernetes/core/tests/integration/targets/setup_namespace/tasks/create.yml ansible_collections/kubernetes/core/tests/integration/targets/setup_namespace/tasks/main.yml -ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt -ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt -ansible_collections/kubernetes/core/tests/sanity/ignore-2.12.txt -ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt -ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt +ansible_collections/kubernetes/core/tests/sanity/ignore-2.18.txt ansible_collections/kubernetes/core/tests/unit/conftest.py ansible_collections/kubernetes/core/tests/unit/requirements.txt ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py @@ -52817,114 +55929,6 @@ ansible_collections/microsoft/ad/tests/utils/shippable/sanity.sh ansible_collections/microsoft/ad/tests/utils/shippable/shippable.sh ansible_collections/microsoft/ad/tests/utils/shippable/units.sh ansible_collections/microsoft/ad/tests/utils/shippable/windows.sh -ansible_collections/netapp/aws/CHANGELOG.rst -ansible_collections/netapp/aws/COPYING -ansible_collections/netapp/aws/FILES.json -ansible_collections/netapp/aws/MANIFEST.json -ansible_collections/netapp/aws/README.md -ansible_collections/netapp/aws/requirements.txt -ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/bug_report.yml -ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/feature_request.yml -ansible_collections/netapp/aws/.github/workflows/coverage.yml -ansible_collections/netapp/aws/.github/workflows/main.yml -ansible_collections/netapp/aws/changelogs/changelog.yaml -ansible_collections/netapp/aws/changelogs/config.yaml -ansible_collections/netapp/aws/changelogs/fragments/20.2.0.yaml -ansible_collections/netapp/aws/changelogs/fragments/20.6.0.yaml -ansible_collections/netapp/aws/changelogs/fragments/20.8.0.yaml -ansible_collections/netapp/aws/changelogs/fragments/20.9.0.yaml -ansible_collections/netapp/aws/changelogs/fragments/2019.10.0.yaml -ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3569.yaml -ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3644.yaml -ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-4416.yaml -ansible_collections/netapp/aws/meta/execution-environment.yml -ansible_collections/netapp/aws/meta/runtime.yml -ansible_collections/netapp/aws/plugins/doc_fragments/netapp.py -ansible_collections/netapp/aws/plugins/module_utils/netapp.py -ansible_collections/netapp/aws/plugins/module_utils/netapp_module.py -ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_active_directory.py -ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_filesystems.py -ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_pool.py -ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_snapshots.py -ansible_collections/netapp/aws/tests/unit/requirements.txt -ansible_collections/netapp/aws/tests/unit/compat/__init__.py -ansible_collections/netapp/aws/tests/unit/compat/builtins.py -ansible_collections/netapp/aws/tests/unit/compat/mock.py -ansible_collections/netapp/aws/tests/unit/compat/unittest.py -ansible_collections/netapp/aws/tests/unit/plugins/module_utils/test_netapp.py -ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_active_directory.py -ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_filesystems.py -ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_pool.py -ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_snapshots.py -ansible_collections/netapp/azure/CHANGELOG.rst -ansible_collections/netapp/azure/COPYING -ansible_collections/netapp/azure/FILES.json -ansible_collections/netapp/azure/HACK.md -ansible_collections/netapp/azure/MANIFEST.json -ansible_collections/netapp/azure/README.md -ansible_collections/netapp/azure/requirements.txt -ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/bug_report.yml -ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/feature_request.yml -ansible_collections/netapp/azure/.github/workflows/codeql-analysis.yml -ansible_collections/netapp/azure/.github/workflows/coverage.yml -ansible_collections/netapp/azure/.github/workflows/main.yml -ansible_collections/netapp/azure/changelogs/changelog.yaml -ansible_collections/netapp/azure/changelogs/config.yaml -ansible_collections/netapp/azure/changelogs/fragments/20.2.0.yaml -ansible_collections/netapp/azure/changelogs/fragments/20.4.0.yaml -ansible_collections/netapp/azure/changelogs/fragments/20.5.0.yaml -ansible_collections/netapp/azure/changelogs/fragments/20.6.0.yaml -ansible_collections/netapp/azure/changelogs/fragments/20.7.0.yaml -ansible_collections/netapp/azure/changelogs/fragments/20.8.0.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3505.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3526.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3663.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3704.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3849.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3935.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3949.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4001.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4070.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4135.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4246.yaml -ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4416.yaml -ansible_collections/netapp/azure/meta/runtime.yml -ansible_collections/netapp/azure/plugins/doc_fragments/azure.py -ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py -ansible_collections/netapp/azure/plugins/doc_fragments/netapp.py -ansible_collections/netapp/azure/plugins/module_utils/azure_rm_netapp_common.py -ansible_collections/netapp/azure/plugins/module_utils/netapp_module.py -ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_account.py -ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_capacity_pool.py -ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_snapshot.py -ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_volume.py -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/aliases -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/meta/main.yml -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/tasks/main.yml -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/aliases -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/meta/main.yml -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/tasks/main.yml -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/aliases -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/meta/main.yml -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/tasks/main.yml -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/aliases -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/meta/main.yml -ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/tasks/main.yml -ansible_collections/netapp/azure/tests/runner/requirements/integration.cloud.azure.txt -ansible_collections/netapp/azure/tests/runner/requirements/requirements-azure.txt -ansible_collections/netapp/azure/tests/runner/requirements/unit.cloud.azure.txt -ansible_collections/netapp/azure/tests/runner/requirements/units.txt -ansible_collections/netapp/azure/tests/unit/requirements.txt -ansible_collections/netapp/azure/tests/unit/compat/__init__.py -ansible_collections/netapp/azure/tests/unit/compat/builtins.py -ansible_collections/netapp/azure/tests/unit/compat/mock.py -ansible_collections/netapp/azure/tests/unit/compat/unittest.py -ansible_collections/netapp/azure/tests/unit/plugins/module_utils/test_netapp_module.py -ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_account.py -ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_capacity_pool.py -ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_snapshot.py -ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume.py -ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume_import.py ansible_collections/netapp/cloudmanager/CHANGELOG.rst ansible_collections/netapp/cloudmanager/COPYING ansible_collections/netapp/cloudmanager/FILES.json @@ -53048,83 +56052,6 @@ ansible_collections/netapp/cloudmanager/tests/unit/plugins/modules/test_na_cloud ansible_collections/netapp/cloudmanager/tests/unit/plugins/modules/test_na_cloudmanager_nss_account.py ansible_collections/netapp/cloudmanager/tests/unit/plugins/modules/test_na_cloudmanager_snapmirror.py ansible_collections/netapp/cloudmanager/tests/unit/plugins/modules/test_na_cloudmanager_volume.py -ansible_collections/netapp/elementsw/CHANGELOG.rst -ansible_collections/netapp/elementsw/FILES.json -ansible_collections/netapp/elementsw/MANIFEST.json -ansible_collections/netapp/elementsw/README.md -ansible_collections/netapp/elementsw/requirements.txt -ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/bug_report.yml -ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/feature_request.yml -ansible_collections/netapp/elementsw/.github/workflows/coverage.yml -ansible_collections/netapp/elementsw/.github/workflows/main.yml -ansible_collections/netapp/elementsw/changelogs/changelog.yaml -ansible_collections/netapp/elementsw/changelogs/config.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/20.2.0.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/20.6.0.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/20.8.0.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/20.9.0.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/2019.10.0.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3117.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3174.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3188.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3196.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3235.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3310.yml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3324.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3731.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3733.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3734.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3800.yaml -ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-4416.yaml -ansible_collections/netapp/elementsw/meta/runtime.yml -ansible_collections/netapp/elementsw/plugins/doc_fragments/netapp.py -ansible_collections/netapp/elementsw/plugins/module_utils/netapp.py -ansible_collections/netapp/elementsw/plugins/module_utils/netapp_elementsw_module.py -ansible_collections/netapp/elementsw/plugins/module_utils/netapp_module.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group_volumes.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_account.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_admin_users.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_backup.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_check_connections.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_config.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_pair.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_snmp.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_drive.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_info.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_initiators.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_ldap.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_network_interfaces.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_node.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_qos_policy.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_restore.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_schedule.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_vlan.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_clone.py -ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_pair.py -ansible_collections/netapp/elementsw/tests/unit/requirements.txt -ansible_collections/netapp/elementsw/tests/unit/compat/__init__.py -ansible_collections/netapp/elementsw/tests/unit/compat/builtins.py -ansible_collections/netapp/elementsw/tests/unit/compat/mock.py -ansible_collections/netapp/elementsw/tests/unit/compat/unittest.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group_volumes.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_account.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_config.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_snmp.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_info.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_initiators.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_network_interfaces.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_nodes.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_qos_policy.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_template.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_vlan.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_volume.py -ansible_collections/netapp/elementsw/tests/unit/plugins/modules_utils/test_netapp_module.py ansible_collections/netapp/ontap/CHANGELOG.rst ansible_collections/netapp/ontap/COPYING ansible_collections/netapp/ontap/FILES.json @@ -54173,57 +57100,6 @@ ansible_collections/netapp/storagegrid/tests/unit/plugins/modules/test_na_sg_org ansible_collections/netapp/storagegrid/tests/unit/plugins/modules/test_na_sg_org_info.py ansible_collections/netapp/storagegrid/tests/unit/plugins/modules/test_na_sg_org_user.py ansible_collections/netapp/storagegrid/tests/unit/plugins/modules/test_na_sg_org_user_s3_key.py -ansible_collections/netapp/um_info/CHANGELOG.rst -ansible_collections/netapp/um_info/COPYING -ansible_collections/netapp/um_info/FILES.json -ansible_collections/netapp/um_info/MANIFEST.json -ansible_collections/netapp/um_info/README.md -ansible_collections/netapp/um_info/metadata-29PbAy.json -ansible_collections/netapp/um_info/requirements.txt -ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/bug_report.yml -ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/feature_request.yml -ansible_collections/netapp/um_info/.github/workflows/coverage.yml -ansible_collections/netapp/um_info/.github/workflows/main.yml -ansible_collections/netapp/um_info/changelogs/changelog.yaml -ansible_collections/netapp/um_info/changelogs/config.yaml -ansible_collections/netapp/um_info/changelogs/fragments/20.7.0.yaml -ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-2952.yaml -ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3920.yaml -ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3962.yaml -ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4059.yaml -ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4087.yaml -ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4416.yaml -ansible_collections/netapp/um_info/meta/execution-environment.yml -ansible_collections/netapp/um_info/meta/runtime.yml -ansible_collections/netapp/um_info/plugins/doc_fragments/netapp.py -ansible_collections/netapp/um_info/plugins/module_utils/netapp.py -ansible_collections/netapp/um_info/plugins/module_utils/netapp_module.py -ansible_collections/netapp/um_info/plugins/modules/na_um_aggregates_info.py -ansible_collections/netapp/um_info/plugins/modules/na_um_clusters_info.py -ansible_collections/netapp/um_info/plugins/modules/na_um_list_aggregates.py -ansible_collections/netapp/um_info/plugins/modules/na_um_list_clusters.py -ansible_collections/netapp/um_info/plugins/modules/na_um_list_nodes.py -ansible_collections/netapp/um_info/plugins/modules/na_um_list_svms.py -ansible_collections/netapp/um_info/plugins/modules/na_um_list_volumes.py -ansible_collections/netapp/um_info/plugins/modules/na_um_nodes_info.py -ansible_collections/netapp/um_info/plugins/modules/na_um_svms_info.py -ansible_collections/netapp/um_info/plugins/modules/na_um_volumes_info.py -ansible_collections/netapp/um_info/tests/unit/requirements.txt -ansible_collections/netapp/um_info/tests/unit/compat/__init__.py -ansible_collections/netapp/um_info/tests/unit/compat/builtins.py -ansible_collections/netapp/um_info/tests/unit/compat/mock.py -ansible_collections/netapp/um_info/tests/unit/compat/unittest.py -ansible_collections/netapp/um_info/tests/unit/plugins/module_utils/test_netapp.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_aggregates_info.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_clusters_info.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_aggregates.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_clusters.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_nodes.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_svms.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_volumes.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_nodes_info.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_svms_info.py -ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_volumes_info.py ansible_collections/netapp_eseries/santricity/.gitignore ansible_collections/netapp_eseries/santricity/CHANGELOG.rst ansible_collections/netapp_eseries/santricity/CONTRIBUTING.md @@ -54497,6 +57373,7 @@ ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_templa ansible_collections/netbox/netbox/docs/plugins/netbox_contact_group_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_contact_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_contact_role_module.rst +ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_choice_set_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_custom_link_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_module.rst @@ -54521,6 +57398,8 @@ ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_termination_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_location_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_manufacturer_module.rst +ansible_collections/netbox/netbox/docs/plugins/netbox_module_bay_module.rst +ansible_collections/netbox/netbox/docs/plugins/netbox_module_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_module_type_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_platform_module.rst ansible_collections/netbox/netbox/docs/plugins/netbox_power_feed_module.rst @@ -54599,6 +57478,7 @@ ansible_collections/netbox/netbox/plugins/modules/netbox_contact.py ansible_collections/netbox/netbox/plugins/modules/netbox_contact_group.py ansible_collections/netbox/netbox/plugins/modules/netbox_contact_role.py ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field.py +ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field_choice_set.py ansible_collections/netbox/netbox/plugins/modules/netbox_custom_link.py ansible_collections/netbox/netbox/plugins/modules/netbox_device.py ansible_collections/netbox/netbox/plugins/modules/netbox_device_bay.py @@ -54621,6 +57501,8 @@ ansible_collections/netbox/netbox/plugins/modules/netbox_l2vpn.py ansible_collections/netbox/netbox/plugins/modules/netbox_l2vpn_termination.py ansible_collections/netbox/netbox/plugins/modules/netbox_location.py ansible_collections/netbox/netbox/plugins/modules/netbox_manufacturer.py +ansible_collections/netbox/netbox/plugins/modules/netbox_module.py +ansible_collections/netbox/netbox/plugins/modules/netbox_module_bay.py ansible_collections/netbox/netbox/plugins/modules/netbox_module_type.py ansible_collections/netbox/netbox/plugins/modules/netbox_platform.py ansible_collections/netbox/netbox/plugins/modules/netbox_power_feed.py @@ -54782,6 +57664,8 @@ ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_l2 ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_location.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_lookup.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_manufacturer.yml +ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module.yml +ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module_bay.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module_type.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_platform.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_power_feed.yml @@ -54837,6 +57721,7 @@ ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_co ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_contact.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_contact_role.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_field.yml +ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_field_choice_set.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_link.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device_bay.yml @@ -54860,6 +57745,8 @@ ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_l2 ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_location.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_lookup.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_manufacturer.yml +ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module.yml +ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module_bay.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module_type.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_platform.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_power_feed.yml @@ -54938,6 +57825,8 @@ ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_l2 ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_location.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_lookup.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_manufacturer.yml +ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module.yml +ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module_bay.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module_type.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_platform.yml ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_power_feed.yml @@ -54981,6 +57870,8 @@ ansible_collections/netbox/netbox/tests/netbox-docker/v3.7/docker-compose.overri ansible_collections/netbox/netbox/tests/sanity/ignore-2.11.txt ansible_collections/netbox/netbox/tests/unit/inventory/__init__.py ansible_collections/netbox/netbox/tests/unit/inventory/test_nb_inventory.py +ansible_collections/netbox/netbox/tests/unit/inventory/test_data/data.json +ansible_collections/netbox/netbox/tests/unit/inventory/test_data/extract_custom_fields/data.json ansible_collections/netbox/netbox/tests/unit/inventory/test_data/filter_query_parameters/data.json ansible_collections/netbox/netbox/tests/unit/inventory/test_data/get_resource_list_chunked/data.json ansible_collections/netbox/netbox/tests/unit/inventory/test_data/group_extractors/data.json @@ -55916,8 +58807,6 @@ ansible_collections/purestorage/flasharray/.github/workflows/black.yaml ansible_collections/purestorage/flasharray/.github/workflows/main.yml ansible_collections/purestorage/flasharray/.github/workflows/stale.yml ansible_collections/purestorage/flasharray/changelogs/.plugin-cache.yaml -ansible_collections/purestorage/flasharray/changelogs/210_add_rename_hgroup.yaml -ansible_collections/purestorage/flasharray/changelogs/211_fix_clearing_host_inititators.yaml ansible_collections/purestorage/flasharray/changelogs/changelog.yaml ansible_collections/purestorage/flasharray/changelogs/config.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/107_host_case_clarity.yaml @@ -55978,6 +58867,8 @@ ansible_collections/purestorage/flasharray/changelogs/fragments/205_policy_proto ansible_collections/purestorage/flasharray/changelogs/fragments/206_add_naa_info.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/207_fix_disable_for_remote_assist.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/208_add_directory_quota_support.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/210_add_rename_hgroup.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/211_fix_clearing_host_inititators.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/213_add_kmip.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/214_join_ou.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/220_capacity_info.yaml @@ -56130,6 +59021,13 @@ ansible_collections/purestorage/flasharray/changelogs/fragments/541_r2_offload.y ansible_collections/purestorage/flasharray/changelogs/fragments/545_4kcert.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/547_lacp_neighbor_info.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/548_uptime.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/550_service.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/555_update_pg.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/558_add_perf_info.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/559_volume_response.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/560_snapshot_epoch.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/561_remote_snap_info.yaml +ansible_collections/purestorage/flasharray/changelogs/fragments/562_host_vol_fix.yaml ansible_collections/purestorage/flasharray/changelogs/fragments/v1.4.0_summary.yaml ansible_collections/purestorage/flasharray/docs/docsite/links.yml ansible_collections/purestorage/flasharray/meta/execution-environment.yml @@ -56393,135 +59291,6 @@ ansible_collections/purestorage/flashblade/plugins/modules/purefb_userquota.py ansible_collections/purestorage/flashblade/plugins/modules/purefb_virtualhost.py ansible_collections/purestorage/flashblade/roles/.keep ansible_collections/purestorage/flashblade/tests/config.yaml -ansible_collections/purestorage/fusion/.gitignore -ansible_collections/purestorage/fusion/.yamllint -ansible_collections/purestorage/fusion/CHANGELOG.rst -ansible_collections/purestorage/fusion/COPYING.GPLv3 -ansible_collections/purestorage/fusion/FILES.json -ansible_collections/purestorage/fusion/MANIFEST.json -ansible_collections/purestorage/fusion/README.md -ansible_collections/purestorage/fusion/.github/CONTRIBUTING.md -ansible_collections/purestorage/fusion/.github/pull_request_template.md -ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/bug_report.md -ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/feature_request.md -ansible_collections/purestorage/fusion/.github/workflows/ansible-lint.yaml -ansible_collections/purestorage/fusion/.github/workflows/black.yaml -ansible_collections/purestorage/fusion/.github/workflows/create-release.yaml -ansible_collections/purestorage/fusion/.github/workflows/main.yml -ansible_collections/purestorage/fusion/.github/workflows/rh_automation_hub_token_keep_alive.yml -ansible_collections/purestorage/fusion/.github/workflows/stale.yml -ansible_collections/purestorage/fusion/changelogs/.plugin-cache.yaml -ansible_collections/purestorage/fusion/changelogs/changelog.yaml -ansible_collections/purestorage/fusion/changelogs/config.yaml -ansible_collections/purestorage/fusion/meta/runtime.yml -ansible_collections/purestorage/fusion/playbooks/simple/create_array.yml -ansible_collections/purestorage/fusion/playbooks/simple/create_availability_zone.yml -ansible_collections/purestorage/fusion/playbooks/simple/create_tenant_space.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_all.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_api_clients.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_arrays.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_availability_zones.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_hardware_types.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_hosts.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_interfaces.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_network_interface_groups.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_placement_groups.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_protection_policies.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_roles.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_snapshots.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_storage_classes.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_storage_endpoints.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_storage_services.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_tenant_spaces.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_tenants.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_users.yml -ansible_collections/purestorage/fusion/playbooks/simple/list_volumes.yml -ansible_collections/purestorage/fusion/playbooks/simple/make_tenant_admin.yml -ansible_collections/purestorage/fusion/playbooks/simple/remove_array.yml -ansible_collections/purestorage/fusion/playbooks/simple/setup_infrastructure.yml -ansible_collections/purestorage/fusion/playbooks/simple/setup_protection_policies.yml -ansible_collections/purestorage/fusion/playbooks/simple/setup_storage_service_class.yml -ansible_collections/purestorage/fusion/playbooks/simple/setup_workloads.yml -ansible_collections/purestorage/fusion/playbooks/tasks/.keep -ansible_collections/purestorage/fusion/playbooks/templates/.keep -ansible_collections/purestorage/fusion/playbooks/vars/.keep -ansible_collections/purestorage/fusion/plugins/doc_fragments/purestorage.py -ansible_collections/purestorage/fusion/plugins/inventory/__init__.py -ansible_collections/purestorage/fusion/plugins/module_utils/errors.py -ansible_collections/purestorage/fusion/plugins/module_utils/fusion.py -ansible_collections/purestorage/fusion/plugins/module_utils/getters.py -ansible_collections/purestorage/fusion/plugins/module_utils/networking.py -ansible_collections/purestorage/fusion/plugins/module_utils/operations.py -ansible_collections/purestorage/fusion/plugins/module_utils/parsing.py -ansible_collections/purestorage/fusion/plugins/module_utils/prerequisites.py -ansible_collections/purestorage/fusion/plugins/module_utils/snapshots.py -ansible_collections/purestorage/fusion/plugins/module_utils/startup.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_api_client.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_array.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_az.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_hap.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_hw.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_info.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_ni.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_nig.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_pg.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_pp.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_ra.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_region.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_sc.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_se.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_ss.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_tenant.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_tn.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_ts.py -ansible_collections/purestorage/fusion/plugins/modules/fusion_volume.py -ansible_collections/purestorage/fusion/test/config.yaml -ansible_collections/purestorage/fusion/tests/helpers.py -ansible_collections/purestorage/fusion/tests/functional/README.md -ansible_collections/purestorage/fusion/tests/functional/__init__.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_api_client.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_array.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_az.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_hap.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_hw.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_info.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_nig.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_pg.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_pp.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_ra.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_region.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_sc.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_se.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_ss.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_tenant.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_ts.py -ansible_collections/purestorage/fusion/tests/functional/test_fusion_volume.py -ansible_collections/purestorage/fusion/tests/functional/utils.py -ansible_collections/purestorage/fusion/tests/integration/README.md -ansible_collections/purestorage/fusion/tests/integration/integration_config.template -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_az/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_hap/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ni/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_nig/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pg/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pp/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_region/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_sc/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_se/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ss/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_tenant/tasks/main.yml -ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ts/tasks/main.yml -ansible_collections/purestorage/fusion/tests/unit/README.md -ansible_collections/purestorage/fusion/tests/unit/mocks/__init__.py -ansible_collections/purestorage/fusion/tests/unit/mocks/module_mock.py -ansible_collections/purestorage/fusion/tests/unit/mocks/operation_mock.py -ansible_collections/purestorage/fusion/tests/unit/module_utils/__init__.py -ansible_collections/purestorage/fusion/tests/unit/module_utils/test_networking.py -ansible_collections/purestorage/fusion/tests/unit/module_utils/test_operations.py -ansible_collections/purestorage/fusion/tests/unit/module_utils/test_parsing.py -ansible_collections/purestorage/fusion/tests/unit/module_utils/test_prerequisites.py -ansible_collections/purestorage/fusion/tests/unit/modules/__init__.py -ansible_collections/purestorage/fusion/tests/unit/modules/test_fusion_az.py ansible_collections/sensu/sensu_go/.flake8 ansible_collections/sensu/sensu_go/.gitattributes ansible_collections/sensu/sensu_go/.gitignore @@ -57036,15 +59805,10 @@ ansible_collections/splunk/es/tests/integration/targets/splunk_data_inputs_netwo ansible_collections/splunk/es/tests/integration/targets/splunk_data_inputs_network/tests/replaced.yaml ansible_collections/splunk/es/tests/integration/targets/splunk_data_inputs_network/tests/rtt.yaml ansible_collections/splunk/es/tests/integration/targets/splunk_data_inputs_network/vars/main.yaml -ansible_collections/splunk/es/tests/sanity/ignore-2.10.txt -ansible_collections/splunk/es/tests/sanity/ignore-2.11.txt -ansible_collections/splunk/es/tests/sanity/ignore-2.12.txt -ansible_collections/splunk/es/tests/sanity/ignore-2.13.txt ansible_collections/splunk/es/tests/sanity/ignore-2.14.txt ansible_collections/splunk/es/tests/sanity/ignore-2.15.txt ansible_collections/splunk/es/tests/sanity/ignore-2.16.txt ansible_collections/splunk/es/tests/sanity/ignore-2.17.txt -ansible_collections/splunk/es/tests/sanity/ignore-2.9.txt ansible_collections/splunk/es/tests/unit/__init__.py ansible_collections/splunk/es/tests/unit/requirements.txt ansible_collections/splunk/es/tests/unit/compat/__init__.py @@ -57320,6 +60084,7 @@ ansible_collections/t_systems_mms/icinga_director/roles/ansible_icinga/tasks/ici ansible_collections/t_systems_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml ansible_collections/t_systems_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml ansible_collections/t_systems_mms/icinga_director/roles/ansible_icinga/tasks/main.yml +ansible_collections/telekom_mms/icinga_director/.aar_doc.yml ansible_collections/telekom_mms/icinga_director/.gitattributes ansible_collections/telekom_mms/icinga_director/.gitignore ansible_collections/telekom_mms/icinga_director/CHANGELOG.md @@ -57464,6 +60229,7 @@ ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_zone_info ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/README.md ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/defaults/main.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/handlers/main.yml +ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/argument_specs.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/main.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command_template.yml @@ -57481,6 +60247,7 @@ ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icing ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_serviceset.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_timeperiod.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user.yml +ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_group.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/main.yml @@ -57558,6 +60325,7 @@ ansible_collections/theforeman/foreman/plugins/modules/puppet_environment.py ansible_collections/theforeman/foreman/plugins/modules/puppetclasses_import.py ansible_collections/theforeman/foreman/plugins/modules/realm.py ansible_collections/theforeman/foreman/plugins/modules/redhat_manifest.py +ansible_collections/theforeman/foreman/plugins/modules/registration_command.py ansible_collections/theforeman/foreman/plugins/modules/repository.py ansible_collections/theforeman/foreman/plugins/modules/repository_info.py ansible_collections/theforeman/foreman/plugins/modules/repository_set.py @@ -57586,6 +60354,7 @@ ansible_collections/theforeman/foreman/plugins/modules/templates_import.py ansible_collections/theforeman/foreman/plugins/modules/user.py ansible_collections/theforeman/foreman/plugins/modules/usergroup.py ansible_collections/theforeman/foreman/plugins/modules/wait_for_task.py +ansible_collections/theforeman/foreman/plugins/modules/webhook.py ansible_collections/theforeman/foreman/roles/activation_keys/README.md ansible_collections/theforeman/foreman/roles/activation_keys/tasks/main.yml ansible_collections/theforeman/foreman/roles/auth_sources_ldap/README.md @@ -57744,6 +60513,7 @@ ansible_collections/theforeman/foreman/tests/test_playbooks/puppet_environment.y ansible_collections/theforeman/foreman/tests/test_playbooks/puppetclasses_import.yml ansible_collections/theforeman/foreman/tests/test_playbooks/realm.yml ansible_collections/theforeman/foreman/tests/test_playbooks/redhat_manifest.yml +ansible_collections/theforeman/foreman/tests/test_playbooks/registration_command.yml ansible_collections/theforeman/foreman/tests/test_playbooks/repositories_role.yml ansible_collections/theforeman/foreman/tests/test_playbooks/repositories_role_deb.yml ansible_collections/theforeman/foreman/tests/test_playbooks/repository.yml @@ -57780,6 +60550,7 @@ ansible_collections/theforeman/foreman/tests/test_playbooks/templates_import.yml ansible_collections/theforeman/foreman/tests/test_playbooks/user.yml ansible_collections/theforeman/foreman/tests/test_playbooks/usergroup.yml ansible_collections/theforeman/foreman/tests/test_playbooks/wait_for_task.yml +ansible_collections/theforeman/foreman/tests/test_playbooks/webhook.yml ansible_collections/theforeman/foreman/tests/test_playbooks/data/ansible_hello.erb ansible_collections/theforeman/foreman/tests/test_playbooks/data/bear-4.1-1.noarch.rpm ansible_collections/theforeman/foreman/tests/test_playbooks/data/delete_file.erb @@ -57855,6 +60626,7 @@ ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/ptable.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/puppetclasses_import.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/realm.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/redhat_manifest.yml +ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/registration_command.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/repository.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/repository_set.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/role.yml @@ -57878,6 +60650,7 @@ ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/upload.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/user.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/usergroup.yml ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/wait_for_task.yml +ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/webhook.yml ansible_collections/theforeman/foreman/tests/test_playbooks/vars/compute_profile.yml ansible_collections/theforeman/foreman/tests/test_playbooks/vars/domain.yml ansible_collections/theforeman/foreman/tests/test_playbooks/vars/host.yml @@ -57887,6 +60660,7 @@ ansible_collections/theforeman/foreman/tests/test_playbooks/vars/server.yml.exam ansible_collections/theforeman/foreman/tests/test_playbooks/vars/subnet.yml ansible_collections/theforeman/foreman/tests/test_playbooks/vars/templates_import.yml ansible_collections/theforeman/foreman/tests/test_playbooks/vars/usergroup.yml +ansible_collections/vmware/vmware_rest/.ansible-lint ansible_collections/vmware/vmware_rest/.gitignore ansible_collections/vmware/vmware_rest/CHANGELOG.rst ansible_collections/vmware/vmware_rest/FILES.json @@ -57895,23 +60669,19 @@ ansible_collections/vmware/vmware_rest/MANIFEST.json ansible_collections/vmware/vmware_rest/README.md ansible_collections/vmware/vmware_rest/bindep.txt ansible_collections/vmware/vmware_rest/dev.md +ansible_collections/vmware/vmware_rest/development.md ansible_collections/vmware/vmware_rest/docs-requirements.txt ansible_collections/vmware/vmware_rest/modules.yaml ansible_collections/vmware/vmware_rest/requirements.txt ansible_collections/vmware/vmware_rest/test-requirements.txt ansible_collections/vmware/vmware_rest/tox.ini +ansible_collections/vmware/vmware_rest/.github/patchback.yml +ansible_collections/vmware/vmware_rest/.github/workflows/changelog.yaml +ansible_collections/vmware/vmware_rest/.github/workflows/linters.yaml +ansible_collections/vmware/vmware_rest/.github/workflows/sanity-tests.yaml ansible_collections/vmware/vmware_rest/changelogs/changelog.yaml ansible_collections/vmware/vmware_rest/changelogs/config.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-changelog.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-module_utils.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/allow_space_in_search_filters.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/cloud.common-bump.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/lookup-handle-special-chars.yml -ansible_collections/vmware/vmware_rest/changelogs/fragments/set_default_galaxy_version.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/vcenter_network_info-dvs-example.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/version_added.yaml -ansible_collections/vmware/vmware_rest/changelogs/fragments/vm_template_library.yaml +ansible_collections/vmware/vmware_rest/changelogs/fragments/.keep ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_info_module.rst ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_module.rst ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_info_module.rst @@ -58349,13 +61119,9 @@ ansible_collections/vmware/vmware_rest/tests/integration/targets/vcenter_vm_scen ansible_collections/vmware/vmware_rest/tests/integration/targets/vcenter_vm_scenario1/tasks/vm_libraryitem.yml ansible_collections/vmware/vmware_rest/tests/integration/targets/vcenter_vm_scenario1/tasks/vm_power.yml ansible_collections/vmware/vmware_rest/tests/integration/targets/vcenter_vm_scenario1/tasks/wait_for_test_vm1.yml -ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.10.txt -ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.11.txt -ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.12.txt -ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.13.txt ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.14.txt ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.15.txt -ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.9.txt +ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.16.txt ansible_collections/vmware/vmware_rest/tests/utils/constraints.txt ansible_collections/vultr/cloud/.ansible-lint ansible_collections/vultr/cloud/.gitignore diff --git a/ansible.egg-info/requires.txt b/ansible.egg-info/requires.txt index 5d89f30f2..5fc274904 100644 --- a/ansible.egg-info/requires.txt +++ b/ansible.egg-info/requires.txt @@ -1 +1 @@ -ansible-core~=2.16.6 +ansible-core~=2.17.0 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